OSDN Git Service

/cp
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / cpp0x / rv1p.C
1 // I, Howard Hinnant, hereby place this code in the public domain.
2
3 // Test overload resolution among reference types
4
5 // { dg-do compile }
6 // { dg-options "-std=c++0x" }
7
8 template <bool> struct sa;
9 template <> struct sa<true> {};
10
11 struct one   {long x[1];};
12 struct two   {long x[2];};
13 struct three {long x[3];};
14 struct four  {long x[4];};
15 struct five  {long x[5];};
16 struct six   {long x[6];};
17 struct seven {long x[7];};
18 struct eight {long x[8];};
19
20 struct A
21 {
22     A();
23     A(const volatile A&&);
24 };
25
26                A    source();
27 const          A  c_source();
28       volatile A  v_source();
29 const volatile A cv_source();
30
31 // 1 at a time
32
33 one   sink_1_1(               A&);
34
35 int test1_1()
36 {
37                    A a;
38     const          A ca;
39           volatile A va;
40     const volatile A cva;
41     sa<sizeof(sink_1_1(a))           == 1 * sizeof(long)> t1;
42     return 0;
43 }
44
45 two   sink_1_2(const          A&);
46
47 int test1_2()
48 {
49                    A a;
50     const          A ca;
51           volatile A va;
52     const volatile A cva;
53     sa<sizeof(sink_1_2(a))           == 2 * sizeof(long)> t1;
54     sa<sizeof(sink_1_2(ca))          == 2 * sizeof(long)> t2;
55     sa<sizeof(sink_1_2(source()))    == 2 * sizeof(long)> t5;
56     sa<sizeof(sink_1_2(c_source()))  == 2 * sizeof(long)> t6;
57     return 0;
58 }
59
60 three sink_1_3(volatile       A&);
61
62 int test1_3()
63 {
64                    A a;
65     const          A ca;
66           volatile A va;
67     const volatile A cva;
68     sa<sizeof(sink_1_3(a))           == 3 * sizeof(long)> t1;
69     sa<sizeof(sink_1_3(va))          == 3 * sizeof(long)> t3;
70     return 0;
71 }
72
73 four  sink_1_4(const volatile A&);
74
75 int test1_4()
76 {
77                    A a;
78     const          A ca;
79           volatile A va;
80     const volatile A cva;
81     sa<sizeof(sink_1_4(a))           == 4 * sizeof(long)> t1;
82     sa<sizeof(sink_1_4(ca))          == 4 * sizeof(long)> t2;
83     sa<sizeof(sink_1_4(va))          == 4 * sizeof(long)> t3;
84     sa<sizeof(sink_1_4(cva))         == 4 * sizeof(long)> t4;
85     return 0;
86 }
87
88 five  sink_1_5(               A&&);
89
90 int test1_5()
91 {
92                    A a;
93     const          A ca;
94           volatile A va;
95     const volatile A cva;
96     sa<sizeof(sink_1_5(source()))    == 5 * sizeof(long)> t5;
97     return 0;
98 }
99
100 six   sink_1_6(const          A&&);
101
102 int test1_6()
103 {
104                    A a;
105     const          A ca;
106           volatile A va;
107     const volatile A cva;
108     sa<sizeof(sink_1_6(source()))    == 6 * sizeof(long)> t5;
109     sa<sizeof(sink_1_6(c_source()))  == 6 * sizeof(long)> t6;
110     return 0;
111 }
112
113 seven sink_1_7(volatile       A&&);
114
115 int test1_7()
116 {
117                    A a;
118     const          A ca;
119           volatile A va;
120     const volatile A cva;
121     sa<sizeof(sink_1_7(source()))    == 7 * sizeof(long)> t5;
122     sa<sizeof(sink_1_7(v_source()))  == 7 * sizeof(long)> t7;
123     return 0;
124 }
125
126 eight sink_1_8(const volatile A&&);
127
128 int test1_8()
129 {
130                    A a;
131     const          A ca;
132           volatile A va;
133     const volatile A cva;
134     sa<sizeof(sink_1_8(source()))    == 8 * sizeof(long)> t5;
135     sa<sizeof(sink_1_8(c_source()))  == 8 * sizeof(long)> t6;
136     sa<sizeof(sink_1_8(v_source()))  == 8 * sizeof(long)> t7;
137     sa<sizeof(sink_1_8(cv_source())) == 8 * sizeof(long)> t8;
138     return 0;
139 }
140
141 int main()
142 {
143     return test1_1() + test1_2() + test1_3() + test1_4() +
144            test1_5() + test1_6() + test1_7() + test1_8();
145 }