【发布时间】:2018-03-14 02:44:07
【问题描述】:
我惊讶地发现std::is_default_constructible 似乎忽略了好友访问。当在一个类中声明一个默认构造函数私有然后给一个函数加好友时,我希望 std::is_default_constructible 会返回 true。
示例:我在 Wandbox 上运行以下命令:https://wandbox.org/ 在 C++17 下使用 Clang 5.0.0 和 GCC 7.2.0。
#include <type_traits>
#include <cassert>
class PrivateConstructor
{
private:
PrivateConstructor() = default;
friend void doIt();
};
void doIt()
{
bool isConstructible = std::is_default_constructible<PrivateConstructor>::value;
PrivateConstructor value;
assert(isConstructible); // FAILS!
}
int main(int,char**)
{
doIt();
return 0;
}
此代码编译但断言失败。是在标准中明确定义还是这是一个可能的编译器错误?
【问题讨论】: