以下工作正常:
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
会失败?
Qn:std::is_default_constructible
是否应该对于具有 private
构造函数的类失败,如以下所述:
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
.
所以我对此的理解以及我基于坦率的名称的语义直觉会说,如果默认构造函数是私有(private)的,它应该会失败。
关于c++ - 为什么 is_default_constructible<Class>::value 在同一类范围内失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41342671/