1 // PR c++/89083
2 // { dg-do compile { target c++11 } }
3 
4 struct C { int a[3]; int i; };
5 struct B { C c[3]; };
6 struct A { B b[3]; };
7 
8 template<class T, int N>
decltype(A{N, N},T ())9 decltype(A{N, N}, T()) fn1(T t)
10 {
11   return t;
12 }
13 
14 template<class T, int N>
decltype(A{{{N, N, N}, {N + 1}}},T ())15 decltype(A{{{N, N, N}, {N + 1}}}, T()) fn2(T t)
16 {
17   return t;
18 }
19 
20 template<class T, int N, int M>
decltype(A{{N + M}},T ())21 decltype(A{{N + M}}, T()) fn3(T t)
22 {
23   return t;
24 }
25 
26 void
f()27 f()
28 {
29   fn1<int, 10>(1);
30   fn2<int, 10>(1);
31   fn3<int, 10, 20>(1);
32 }
33