https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69717
--- Comment #2 from Daniel Krügler <daniel.kruegler at googlemail dot com> --- This is fixed in the current trunk (Tested on gcc HEAD 6.0.0 20160207 (experimental)). Btw.: Your test case is confusing. A better test case would be the following one, where the static assertion tests the expected outcome: #include <type_traits> #include <utility> struct S { S(int) {} }; int main() { using pair_t = std::pair<S, S>; static_assert(!std::is_default_constructible<pair_t>::value, ""); }