http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53349
Daniel Krügler <daniel.kruegler at googlemail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |daniel.kruegler at | |googlemail dot com --- Comment #1 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2012-05-15 10:53:22 UTC --- I can confirm this for gcc 4.8.0 20120513 (experimental). A current workaround is to replace the member declaration constexpr Foo(const Foo<N-1> a) : m_a(a) {} by constexpr Foo(const Foo<N-1>& a) : m_a(a) {} The following is a simplified form of the problem: template<int N> struct Foo { constexpr Foo(const Foo<N-1> a) : m_a(a) {} // Line 3 constexpr Foo(const Foo<N> &a) : m_a(a.m_a) {} Foo<N-1> m_a; }; template <> struct Foo<0> {}; constexpr auto res = Foo<2>(Foo<1>(Foo<0>())); // Line 10 10| in constexpr expansion of 'Foo<2>(Foo<1>((*(const Foo<1>*)(& Foo<1>((Foo<0>((* & Foo<0>())), Foo<0>()))))))'| 3| in constexpr expansion of '((Foo<2>*)this)->Foo<2>::m_a.Foo<N>::Foo<1>((* & a))'| 10|internal compiler error: in cxx_eval_indirect_ref, at cp/semantics.c:7408|