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|

Reply via email to