我有以下代码片段
#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的bug,还是由标准定义的?
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美元
无论如何,我知道,静态断言不应该失败,因为类型确实不是默认可构造的,也不是无条件可构造的。问题是:为什么会有编译错误,而不是我的静态断言?
has_nothrow_constructor
和is_nothrow_constructible
呢? - ForEveR