1// PR c++/43024
2// { dg-options "-O2" }
3
4void foo();
5
6template<int> struct X
7{
8  enum { e };
9  typedef int Y;
10};
11
12template<int N = 0> struct A
13{
14  ~A() { foo(); }
15  A() { a<0>(0); }
16  template<int> void a(typename X<!X<N>::e>::Y);
17  struct B b();
18};
19
20struct B
21{
22  A<> b0, b1, b2, b3;
23  B operator+ (const B&);
24};
25
26struct C
27{
28  A<> c0, c1, c2, c3, c4, c5, c6, c7, c8;
29};
30
31inline void bar(int i)
32{
33  A<> a0, a1;
34  if (i) a0.b() + a0.b() + a0.b() + a0.b();
35}
36
37void baz()
38{
39  C c;
40  bar(0);
41}
42