为什么is_default_constructible <class> :: value在同一个类范围内失败

时间:2016-12-27 09:41:55

标签: c++ c++11 typetraits default-constructor static-assert

以下工作正常:

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

1 个答案:

答案 0 :(得分:11)

documentation page表示std::is_default_constructible<T>

  

T应该是完整类型,(可能是cv限定的)void,或者是未知边界的数组。否则,行为未定义。

由于您在班级内,类型尚未完全定义,我想这就是造成差异的原因。

至于附带问题,这个特性似乎是基于std::is_constructible,这似乎意味着如果变量定义

T obj();

well formed成员常量value等于true。在所有其他情况下,valuefalse

因此,我对此的理解以及基于语义本能的坦诚名称会说如果默认构造函数是私有的,它应该会失败。