Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/other/pr53574.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// PR c++/53574 // { dg-do compile { target c++11 } } // { dg-options "-fstack-usage" } template <typename> struct A { typedef int type; }; struct B { typedef __SIZE_TYPE__ H; }; template <typename> class allocator : B {}; template <typename _Alloc> struct C { template <typename T> static typename T::H foo(T *); typedef decltype(foo((_Alloc *)0)) H; template <typename U> static typename A<H>::type bar(U) { return typename A<H>::type (); } static int baz(_Alloc p1) { bar(p1); return 0; } }; template <typename _Alloc> struct I : C<_Alloc> {}; template <typename, typename> struct J { typedef I<allocator<int>> K; K k; }; struct D : J<int, allocator<int>> { void fn(int, int) { K m; I<K>::baz(m); } }; template <class Ch, class = int, class = int> struct F { F(); F(const Ch *); F test(); D d; }; int l; struct G { G(F<char>); }; char n; template <class Ch, class Tr, class Alloc> F<Ch, Tr, Alloc>::F(const Ch *) { test(); } template <class Ch, class Tr, class Alloc> F<Ch, Tr, Alloc> F<Ch, Tr, Alloc>::test() { d.fn(l, 0); return F<Ch, Tr, Alloc> (); } G fn1() { return G(&n); }