OSDN Git Service

cp/:
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / cpp0x / auto12.C
1 // More auto/decltype mangling tests.
2 // { dg-options "-std=c++0x" }
3
4 template <class T>
5 struct B
6 {
7   static int i;
8 };
9
10 int&& x();
11
12 template <class T>
13 struct A
14 {
15   static int i;
16   static int &ir;
17   static int &&irr;
18   template <class U>
19   auto f(U u) -> decltype (u + i);
20   template <class U>
21   auto fr(U u) -> decltype (u + ir);
22   template <class U>
23   auto frr(U u) -> decltype (u + irr);
24   template <class U>
25   auto g(U u) -> decltype (u + sizeof (i));
26   template <class U>
27   auto h(U u) -> decltype (u + B<U>::i);
28   template <class U>
29   auto j(U u) -> decltype (u + x());
30 };
31
32 template<class T> template<class U>
33 auto A<T>::f(U u) -> decltype (u + i)
34 {
35   return u + i;
36 }
37
38 int main()
39 {
40   // { dg-final { scan-assembler  "_ZN1AIiE1fIiEEDTplfp_L_ZNS0_1iEEET_" } }
41   A<int>().f(1);
42   // { dg-final { scan-assembler  "_ZN1AIiE2frIiEEDTplfp_L_ZNS0_2irEEET_" } }
43   A<int>().fr(1);
44   // { dg-final { scan-assembler  "_ZN1AIiE3frrIiEEDTplfp_L_ZNS0_3irrEEET_" } }
45   A<int>().frr(1);
46   // { dg-final { scan-assembler  "_ZN1AIiE1gIiEEDTplfp_szL_ZNS0_1iEEET_" } }
47   A<int>().g(1);
48   // { dg-final { scan-assembler  "_ZN1AIiE1hIiEEDTplfp_sr1BIT_E1iES3_" } }
49   A<int>().h(1);
50   // { dg-final { scan-assembler  "_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_" } }
51   A<int>().j(1);
52 }