http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53609
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |rejects-valid Status|UNCONFIRMED |NEW Last reconfirmed| |2012-06-08 CC| |dodji at gcc dot gnu.org Summary|Wrong variadic template |Wrong variadic template |pack expansion |pack expansion in alias | |template Ever Confirmed|0 |1 Known to fail| |4.7.0, 4.8.0 --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-06-08 09:49:33 UTC --- Confirmed. It works fine if you rewrite it without alias templates: template<int...I> struct NumList { typedef List< Z<I...> > type; }; then use NumList::type instead of NumList, so the problem is with the alias template substitution. G++ seems to be treating Z<I>... as Z<I...> in the type-id of the alias-declaration.