// PR middle-end/34018 // { dg-do compile } // { dg-options "-O1" } template struct A { typedef E F; E elems[N]; A () {} E *begin () { return elems; } const E *begin () const { return elems; } explicit A (F const &v0, F const &v1, F const &v2) { elems[0] = v0; elems[1] = v1; elems[2] = v2; } }; template inline void bar (const E1 *a1, E2 const &a2, E3 *a3, unsigned long const &sz) { E3 *r = a3 + sz; for (;a3 != r; a1++, a3++) *a3 = *a1 - a2; } template inline A operator- (A const& a1, E const& a2) { typedef A G; G a3; bar (a1.begin (), a2, a3.begin (), N); return a3; } struct B { B (A const &m) : n (m - static_cast(1)) {} A n; }; void foo () { B t (A (0,0,0)); }