blob: 8d2a5d4bb28d2286ca212a062484d68939aa8d8e [file] [log] [blame]
// PR middle-end/34018
// { dg-do compile }
// { dg-options "-O1" }
template <typename E, unsigned long N>
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 <typename E1, typename E2, typename E3>
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<typename E, unsigned long N>
inline A<E, N>
operator- (A<E, N> const& a1, E const& a2)
{
typedef A<E, N> G;
G a3;
bar (a1.begin (), a2, a3.begin (), N);
return a3;
}
struct B
{
B (A<unsigned long, 3> const &m) : n (m - static_cast<unsigned long>(1)) {}
A<unsigned long, 3> n;
};
void
foo ()
{
B t (A<unsigned long, 3> (0,0,0));
}