http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55043
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |daniel.kruegler at | |googlemail dot com --- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-10-24 01:24:02 UTC --- The problem reduces to this: #include <type_traits> #include <utility> struct M { M(M&&) { } }; template<typename T> struct U { U(const U& n) : m(n.m) { } U(U&& n); T m; }; static_assert( std::is_copy_constructible<U<M>>::value, "huh?" ); We need that static_assertion to fail because the type is *not* copy constructible. But it passes, because this compiles OK: decltype(::new U<M>(std::declval<const U<M>&>())) n; Even though the definition of U(const U&) is ill-formed for a non-copyable template argument, using that constructor as an unevaluated operand compiles OK. Daniel, is this a bug in is_constructible?