以下工作正常:
struct X { }; // OK
static_assert(std::is_default_constructible<X>::value, "Error");
以下断言编译失败:
struct X { static_assert(std::is_default_constructible<X>::value, "Error"); }; // Fails
为什么类内部的static_assert
会失败?
Side Qn:如果构造函数是私有的,std::is_default_constructible
应该为具有private
构造函数的类失败如:std:
:is_default_constructible
文档页面说std::is_default_constructible<T>
:
T 应为完整类型,(可能符合 cv 标准)无效,或未知边界数组。否则,行为是未定义的。
由于您属于您的类,因此类型尚未完全定义,我想这就是差异的原因。
至于侧面问题,这个特征似乎是基于std::is_constructible
这似乎意味着如果变量定义
T obj();
是形成良好的成员常数value
等于true
。在所有其他情况下,value
是false
.
因此,我对此的理解以及我坦率的基于名称的语义本能会说,如果默认构造函数是私有的,它应该失败。