http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51723
Bug #: 51723 Summary: [C++0x] delegating constructor ICE Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: andyg1...@hotmail.co.uk The following reduced code generates an ICE in gcc version 4.7.0 20111219: template <int... V> struct A { static constexpr int a[sizeof...(V)] = { V... }; }; template <int... V> constexpr int A<V...>::a[]; struct B { const int* const b; template <unsigned int N> constexpr B(const int(&b)[N]) : b(b) { } template <int... V> constexpr B(A<V...>) : B(A<V...>::a) /* replace 'B' with 'b' to compile without ICE */ { } }; constexpr B works = A<10, 20, 30>::a; /* uses first ctor */ constexpr B causes_ice = A<10, 20, 30>(); /* uses second ctor */ The ICE occurs around the delegating constructor, but the code compiles correctly if it is substituted for a non-delegating form of the constructor. The message from gcc is: ice.cpp: In instantiation of 'constexpr B::B(A<V ...>) [with int ...V = {10, 20, 30}]': ice.cpp:25:40: required from here ice.cpp:21:7: internal compiler error: in build_data_member_initialization, at cp/semantics.c:5844 Please submit a full bug report, with preprocessed source if appropriate.