http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58353
Bug ID: 58353 Summary: Internal Compiler Error with Variadic Templates Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: spamjunk at stny dot rr.com bug.cpp: In instantiation of 'struct seq_t<int, 123, 5>::gen<1, 123, 123, 123, 123>': bug.cpp:11:12: recursively required from 'struct seq_t<int, 123, 5>::gen<4, 123>' bug.cpp:11:12: required from 'struct seq_t<int, 123, 5>::gen<5>' bug.cpp:21:59: required from 'static constexpr seq_t<E, V, CNT>::bits_t seq_t<E, V, CNT>::init() [ with E = int; E V = 123; int CNT = 5]' bug.cpp:30:42: required from here bug.cpp:11:12: internal compiler error: in tsubst, at cp/pt.c:11306 struct gen : gen<N - 1, V, Es...>{}; Test Code: #include <iostream> using namespace std; template<class E, E V, int CNT> struct seq_t { template<E... Es> struct seq{}; template<int N, E... Es> struct gen : gen<N - 1, V, Es...>{}; template<E... Es> struct gen<0, Es...> : seq<Es...>{}; struct bits_t{ E e[CNT]; }; template<E... Es> static constexpr bits_t init(seq<Es...>) {return {{Es...}};} static constexpr bits_t init() {return init(gen<CNT>{});} }; int main() { typedef seq_t<int, 123, 5> wow; constexpr wow::bits_t bits(wow::init()); cout << bits.e[0] << endl; cout << bits.e[1] << endl; cout << bits.e[2] << endl; cout << bits.e[3] << endl; cout << bits.e[4] << endl; }