The following:
#include <type_traits> struct b { b() = default; b(const b&) = delete; }; void test01() { typedef b test_type; // typedef std::is_standard_layout<test_type> standard_layout_p; typedef std::has_trivial_default_constructor<test_type> ctor_p; typedef std::has_trivial_destructor<test_type> dtor_p; // static_assert(standard_layout_p::value, "not standard_layout"); static_assert(ctor_p::value, "default ctor not trivial"); static_assert(dtor_p::value, "dtor not trivial"); } Gives: %$bld/H-x86-gcc.20081020/bin/g++ -std=gnu++0x -c standard_layout.cc standard_layout.cc: In function 'void test01()': standard_layout.cc:40: error: static assertion failed: "default ctor not trivial" Removing the copy constructor makes the error go away. -- Summary: has_trivial_default_constructor vs. deleted copy ctor Product: gcc Version: 4.4.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bkoz at gcc dot gnu dot org GCC host triplet: all http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37906