1// { dg-options "-O -Wno-psabi" }
2// { dg-do compile }
3
4struct A { int a; };
5template <typename T, typename V> struct B { V operator[] (T); };
6union U { long double ld; void *v; };
7A a;
8
9void
10bar (U &x)
11{
12  if (x.v) *reinterpret_cast <A *>(x.v) = a;
13}
14
15struct C { C (A) { c.ld = 0; bar (c); } U c; };
16struct D { A d, e; void foo () { f[0][d] = e; } B <int, B <A, C> > f; };
17
18void
19baz ()
20{
21  D d;
22  d.foo ();
23}
24