// PR middle-end/42760
// { dg-do compile }

template <typename T>
struct A
{
  static T b (T it) { return it; }
};

template <typename T, typename U>
static U
baz (T x, T y, U z)
{
  for (long n = y - x; n > 0; --n)
    {
      *z = *x;
      ++z;
    }
  return U();
};

template <typename T, typename U>
U
bar (T x, T y, U z)
{
  baz (A <T>::b (x), A <T>::b (y), A <U>::b (z));
  return U();
}

struct C
{
  __complex__ float v;
};

template <class T>
struct B
{
  B (T y[]) { bar (y, y + 1, x); }
  operator T *() { return x; }
  T x[1];
};

B <C>
foo ()
{
  C y[1];
  return B <C> (y);
};
