以下工作正常:
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<T> error, if constructor is private
答案 0 :(得分:11)
documentation page表示std::is_default_constructible<T>
:
T应该是完整类型,(可能是cv限定的)void,或者是未知边界的数组。否则,行为未定义。
由于您在班级内,类型尚未完全定义,我想这就是造成差异的原因。
至于附带问题,这个特性似乎是基于std::is_constructible
,这似乎意味着如果变量定义
T obj();
well formed成员常量value
等于true
。在所有其他情况下,value
为false
。
因此,我对此的理解以及基于语义本能的坦诚名称会说如果默认构造函数是私有的,它应该会失败。