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



以下工作正常:

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错误

中所述

文档页面说std::is_default_constructible<T>

T 应为完整类型,(可能符合 cv 标准)无效,或未知边界数组。否则,行为是未定义的。

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


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

T obj();

是形成良好的成员常数value等于true。在所有其他情况下,valuefalse.

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

相关内容

最新更新