http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53786
--- Comment #4 from Hristo Venev <mustrumr97 at gmail dot com> 2012-12-19 13:51:08 UTC --- That bug was fixed. However there is still another one: template<class... Data> struct List{}; template<class T, class... Ts> using Tail=List<Ts...>; template<class... Ts> using Tail2=Tail<Ts...>; using A=Tail2<int, char, char>; fail.cpp: In substitution of ‘template<class T, class ... Ts> using Tail = List<Ts ...> [with T = int; Ts = char]’: fail.cpp:6:24: required by substitution of ‘template<class ... Ts> using Tail2 = Tail<Ts ...> [with Ts = {int, char, char}]’ fail.cpp:7:30: required from here fail.cpp:4:23: error: template argument 1 is invalid using Tail=List<Ts...>; ^ In the diagnostic it is said that in the instantiation of Tail<int, char, char> Ts is char, it should be {char, char} - a list of types, not a single type. Additionally when `using A=Tail2<>;` (which is invalid) the compiler still crashes.