OSDN Git Service

437088d654cdb266c7a9ad52a700a4c5092bfd56
[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  "_ZN1AIiE1fIiEEDTplsTT_sTiES2_" } }
41   A<int>().f(1);
42   // { dg-final { scan-assembler  "_ZN1AIiE2frIiEEDTplsTT_sTiES2_" } }
43   A<int>().fr(1);
44   // { dg-final { scan-assembler  "_ZN1AIiE3frrIiEEDTplsTT_sTiES2_" } }
45   A<int>().frr(1);
46   // { dg-final { scan-assembler  "_ZN1AIiE1gIiEEDTplsTT_sR.ES2_" } }
47   A<int>().g(1);
48   // { dg-final { scan-assembler  "_ZN1AIiE1hIiEEDTplsTT_sr1BIS2_E1iES2_" } }
49   A<int>().h(1);
50   // { dg-final { scan-assembler  "_ZN1AIiE1jIiEEDTplsTT_sRiES2_" } }
51   A<int>().j(1);
52 }