为什么 is_default_constructible<Class>::value 在相同的 class 范围内失败

Why is_default_constructible<Class>::value fails within the same class scope

以下工作正常:

struct X { };  // OK
static_assert(std::is_default_constructible<X>::value, "Error"); 

以下断言编译失败:

struct X { static_assert(std::is_default_constructible<X>::value, "Error"); };  // Fails

为什么class里面的static_assert会失败?


Side Qn:对于 classes 和 private 中讨论的构造函数,std::is_default_constructible 是否应该失败:
std::is_default_constructible<T> error, if constructor is private

documentation page 表示 std::is_default_constructible<T>:

T shall be a complete type, (possibly cv-qualified) void, or an array of unknown bound. Otherwise, the behavior is undefined.

由于您在 class 中,类型尚未完全定义,我想这就是差异的原因。


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

T obj();

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

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