1// { dg-do assemble  }
2
3template<int N1, int N2>
4struct meta_max {
5    enum { max = (N1 > N2) ? N1 : N2 };
6};
7
8struct X {
9    enum {
10       a = 0,
11       n = 0
12    };
13};
14
15template<class T1, class T2>
16struct Y {
17
18    enum {
19       a = T1::a + T2::a,
20
21       // NB: if the next line is changed to
22       // n = (T1::n > T2::n) ? T1::n : T2::n
23       // the problem goes away.
24
25       n = meta_max<T1::n,T2::n>::max
26    };
27};
28
29int z = Y<X,X>::a;
30