https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63849
Bug ID: 63849 Summary: [4.9/5.0 Regression] ICE on variadic alias template with wrappers Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: reagentoo at gmail dot com The following invalid (or perhaps invalid, I think) code snippet triggers an ICE in GCC 4.9.2 and 5.0.0 (20141111): ================================================ template <class _T, class...> using First = _T; // we should not use this // alias with only // one pack parameter (?) template <template <class...> class _Successor, int, class... _Xs> struct Overlay { using O = _Successor<_Xs...>; }; template <class... _Pack> struct List { template <int _s> using O = typename Overlay<List, _s, _Pack...>::O; template <template <class...> class _S> using Pass = _S<_Pack...>; template <int _i> using At = typename O<_i> ::template Pass<First>; }; template <int _i> using At = typename List<int, char> ::template At<_i>; template <int _i> void func_crash(At<_i>&) {} int main(int argc, char *argv[]) { char ccc; int iii; func_crash<0>(iii); } ================================================ GCC 5.0.0 (20141111) output: prog.cc: In instantiation of 'void func_crash(At<_i>&) [with int _i = 0; At<_i> = int]': prog.cc:31:6: internal compiler error: in write_name, at cp/mangle.c:801 void func_crash(At<_i>&) {} ^