我有以下片段
#include <type_traits>
#include <boost/type_traits.hpp>
class C { C() { } };
int main()
{
static_assert(!boost::has_trivial_default_constructor<C>::value, "Constructible");
static_assert(!std::is_default_constructible<C>::value, "Constructible");
}
条件不相等,但第一个条件工作正常,第二个构造给出错误,构造函数是私有的。编译器 gcc 4.7 ... 那么,这是 gcc 错误,还是由标准定义的?
http://liveworkspace.org/code/NDQyMD 5 美元
好的。由于这个条件真的不相等 - 我们可以使用这样的东西
#include <type_traits>
#include <boost/type_traits.hpp>
class C { private: C() noexcept(false) { } };
int main()
{
static_assert(!boost::has_nothrow_constructor<C>::value, "Constructible");
static_assert(!std::is_nothrow_constructible<C>::value, "Constructible");
}
http://liveworkspace.org/code/NDQyMD 24 美元
无论如何,我知道,static_assert 不应该失败,因为类型实际上不是默认可构造的/不是 nothrow 可构造的。问题是:为什么会出现编译错误,而不是我的静态断言?