// PR c++/53574 // { dg-do compile { target c++11 } } // { dg-options "-fstack-usage" } template struct A { typedef int type; }; struct B { typedef __SIZE_TYPE__ H; }; template class allocator : B {}; template struct C { template static typename T::H foo(T *); typedef decltype(foo((_Alloc *)0)) H; template static typename A::type bar(U) { return typename A::type (); } static int baz(_Alloc p1) { bar(p1); return 0; } }; template struct I : C<_Alloc> {}; template struct J { typedef I> K; K k; }; struct D : J> { void fn(int, int) { K m; I::baz(m); } }; template struct F { F(); F(const Ch *); F test(); D d; }; int l; struct G { G(F); }; char n; template F::F(const Ch *) { test(); } template F F::test() { d.fn(l, 0); return F (); } G fn1() { return G(&n); }