为什么 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
。在所有其他情况下,value
是 false
。
所以我对此的理解以及我坦率的基于名称的语义直觉会说,如果默认构造函数是私有的,它应该会失败。
以下工作正常:
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
。在所有其他情况下,value
是 false
。
所以我对此的理解以及我坦率的基于名称的语义直觉会说,如果默认构造函数是私有的,它应该会失败。