http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55993
--- Comment #3 from Joshua Napoli <jnapoli at alum dot mit.edu> 2013-01-15 18:44:10 UTC --- The problem has to do with a completely empty struct being used twice consecutively in the tuple type list. std::tuple<A,A> inherits from A (by inheriting _Head_base<A> which inherits A). Maybe there is a problem with confusing the inherited types when struct A is empty and the base A might not have a separate address from the top-level tuple. It compiles OK when I add a member variable: struct A { constexpr A() : x(0) {} int x; }; constexpr std::tuple<A,A> t; constexpr auto a = decltype(t)::_M_head(t); But fails without it: struct A { constexpr A() /*: x(0)*/ {} /*int x;*/ }; constexpr std::tuple<A,A> t; constexpr auto a = decltype(t)::_M_head(t); It compiles OK when I use two different classes struct A { constexpr A() {} }; struct B { constexpr B() {} }; constexpr std::tuple<A,B> t; constexpr auto a = decltype(t)::_M_head(t); If fails to build with two As and a B: struct A { constexpr A() {} }; struct B { constexpr B() {} }; constexpr std::tuple<A,A,B> t; constexpr auto a = decltype(t)::_M_head(t); (Note that std::get<0>( std::tuple<...> ) returns std::tuple<...>::_M_head(t).)