https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51222
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> --- We should revisit the library traits now this is fixed: // Implementation for non-reference types. To meet the proper // variable definition semantics, we also need to test for // is_destructible in this case. // This form should be simplified by a single expression: // ::delete ::new _Tp(declval<_Arg>()), see c++/51222. struct __do_is_direct_constructible_impl { template<typename _Tp, typename _Arg, typename = decltype(::new _Tp(declval<_Arg>()))> static true_type __test(int);