PR c++/85765 - SFINAE and non-type default template arg.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / trailing3.C
blobced5d5eaa4ef4e42a39dbbc1d752816e49c0d8bc
1 // More auto/decltype mangling tests.
2 // { dg-do compile { target c++11 } }
3 // { dg-options "-fabi-version=0" }
5 template <class T>
6 struct B
8   static int i;
9 };
11 int&& x();
13 template <class T>
14 struct A
16   static int i;
17   static int &ir;
18   static int &&irr;
19   template <class U>
20   auto f(U u) -> decltype (u + i);
21   template <class U>
22   auto fr(U u) -> decltype (u + ir);
23   template <class U>
24   auto frr(U u) -> decltype (u + irr);
25   template <class U>
26   auto g(U u) -> decltype (u + sizeof (i));
27   template <class U>
28   auto h(U u) -> decltype (u + B<U>::i);
29   template <class U>
30   auto j(U u) -> decltype (u + x());
33 template<class T> template<class U>
34 auto A<T>::f(U u) -> decltype (u + i)
36   return u + i;
39 template <class... Args>
40 int f (Args... args);
42 template <class... Args>
43 auto g (Args... args) -> decltype (f ((args+1)...))
45   return (f ((args+1)...));
48 int main()
50   // { dg-final { scan-assembler  "_ZN1AIiE1fIiEEDTplfp_L_ZNS0_1iEEET_" } }
51   A<int>().f(1);
52   // { dg-final { scan-assembler  "_ZN1AIiE2frIiEEDTplfp_L_ZNS0_2irEEET_" } }
53   A<int>().fr(1);
54   // { dg-final { scan-assembler  "_ZN1AIiE3frrIiEEDTplfp_L_ZNS0_3irrEEET_" } }
55   A<int>().frr(1);
56   // { dg-final { scan-assembler  "_ZN1AIiE1gIiEEDTplfp_szL_ZNS0_1iEEET_" } }
57   A<int>().g(1);
58   // { dg-final { scan-assembler  "_ZN1AIiE1hIiEEDTplfp_sr1BIT_E1iES3_" } }
59   A<int>().h(1);
60   // { dg-final { scan-assembler  "_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_" } }
61   A<int>().j(1);
62   // { dg-final { scan-assembler  "_Z1gIJidEEDTcl1fspplfp_Li1EEEDpT_" } }
63   g(42, 1.0);