OSDN Git Service

9a925ef0c61788f6fb77da776d748a023a66cc17
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / cpp0x / rv6n.C
1 // I, Howard Hinnant, hereby place this code in the public domain.
2
3 // Test overlaod resolution among referece 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   {char x[1];};
12 struct two   {char x[2];};
13 struct three {char x[3];};
14 struct four  {char x[4];};
15 struct five  {char x[5];};
16 struct six   {char x[6];};
17 struct seven {char x[7];};
18 struct eight {char 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 // 6 at a time
32
33 one   sink_6_123456(               A&);  // { dg-error "" }
34 two   sink_6_123456(const          A&);  // { dg-error "" }
35 three sink_6_123456(volatile       A&);  // { dg-error "" }
36 four  sink_6_123456(const volatile A&);  // { dg-error "" }
37 five  sink_6_123456(               A&&);  // { dg-error "" }
38 six   sink_6_123456(const          A&&);  // { dg-error "" }
39
40 int test6_123456()
41 {
42                    A a;
43     const          A ca = a;
44           volatile A va;
45     const volatile A cva = a;
46     sink_6_123456(v_source());   // { dg-error "no match" }
47     sink_6_123456(cv_source());  // { dg-error "no match" }
48     return 0;
49 }
50
51 one   sink_6_123457(               A&);  // { dg-error "" }
52 two   sink_6_123457(const          A&);  // { dg-error "" }
53 three sink_6_123457(volatile       A&);  // { dg-error "" }
54 four  sink_6_123457(const volatile A&);  // { dg-error "" }
55 five  sink_6_123457(               A&&);  // { dg-error "" }
56 seven sink_6_123457(volatile       A&&);  // { dg-error "" }
57
58 int test6_123457()
59 {
60                    A a;
61     const          A ca = a;
62           volatile A va;
63     const volatile A cva = a;
64     sink_6_123457(cv_source());  // { dg-error "no match" }
65     return 0;
66 }
67
68 two   sink_6_235678(const          A&);  // { dg-error "" }
69 three sink_6_235678(volatile       A&);  // { dg-error "" }
70 five  sink_6_235678(               A&&);  // { dg-error "" }
71 six   sink_6_235678(const          A&&);  // { dg-error "" }
72 seven sink_6_235678(volatile       A&&);  // { dg-error "" }
73 eight sink_6_235678(const volatile A&&);  // { dg-error "" }
74
75 int test6_235678()
76 {
77                    A a;
78     const          A ca = a;
79           volatile A va;
80     const volatile A cva = a;
81     sink_6_235678(a);  // { dg-error "ambiguous" }
82     return 0;
83 }
84
85 two   sink_6_234678(const          A&);  // { dg-error "" }
86 three sink_6_234678(volatile       A&);  // { dg-error "" }
87 four  sink_6_234678(const volatile A&);  // { dg-error "" }
88 six   sink_6_234678(const          A&&);  // { dg-error "" }
89 seven sink_6_234678(volatile       A&&);  // { dg-error "" }
90 eight sink_6_234678(const volatile A&&);  // { dg-error "" }
91
92 int test6_234678()
93 {
94                    A a;
95     const          A ca = a;
96           volatile A va;
97     const volatile A cva = a;
98     sink_6_234678(a);         // { dg-error "ambiguous" }
99     sink_6_234678(source());  // { dg-error "ambiguous" }
100     return 0;
101 }
102
103 two   sink_6_234578(const          A&);  // { dg-error "" }
104 three sink_6_234578(volatile       A&);  // { dg-error "" }
105 four  sink_6_234578(const volatile A&);  // { dg-error "" }
106 five  sink_6_234578(               A&&);  // { dg-error "" }
107 seven sink_6_234578(volatile       A&&);  // { dg-error "" }
108 eight sink_6_234578(const volatile A&&);  // { dg-error "" }
109
110 int test6_234578()
111 {
112                    A a;
113     const          A ca = a;
114           volatile A va;
115     const volatile A cva = a;
116     sink_6_234578(a);  // { dg-error "ambiguous" }
117     return 0;
118 }
119
120 two   sink_6_234568(const          A&);  // { dg-error "" }
121 three sink_6_234568(volatile       A&);  // { dg-error "" }
122 four  sink_6_234568(const volatile A&);  // { dg-error "" }
123 five  sink_6_234568(               A&&);  // { dg-error "" }
124 six   sink_6_234568(const          A&&);  // { dg-error "" }
125 eight sink_6_234568(const volatile A&&);  // { dg-error "" }
126
127 int test6_234568()
128 {
129                    A a;
130     const          A ca = a;
131           volatile A va;
132     const volatile A cva = a;
133     sink_6_234568(a);  // { dg-error "ambiguous" }
134     return 0;
135 }
136
137 two   sink_6_234567(const          A&);  // { dg-error "" }
138 three sink_6_234567(volatile       A&);  // { dg-error "" }
139 four  sink_6_234567(const volatile A&);  // { dg-error "" }
140 five  sink_6_234567(               A&&);  // { dg-error "" }
141 six   sink_6_234567(const          A&&);  // { dg-error "" }
142 seven sink_6_234567(volatile       A&&);  // { dg-error "" }
143
144 int test6_234567()
145 {
146                    A a;
147     const          A ca = a;
148           volatile A va;
149     const volatile A cva = a;
150     sink_6_234567(a);            // { dg-error "ambiguous" }
151     sink_6_234567(cv_source());  // { dg-error "no match" }
152     return 0;
153 }
154
155 one   sink_6_134678(               A&);
156 three sink_6_134678(volatile       A&);
157 four  sink_6_134678(const volatile A&);
158 six   sink_6_134678(const          A&&);  // { dg-error "" }
159 seven sink_6_134678(volatile       A&&);  // { dg-error "" }
160 eight sink_6_134678(const volatile A&&);  // { dg-error "" }
161
162 int test6_134678()
163 {
164                    A a;
165     const          A ca = a;
166           volatile A va;
167     const volatile A cva = a;
168     sink_6_134678(source());  // { dg-error "ambiguous" }
169     return 0;
170 }
171
172 one   sink_6_124678(               A&);
173 two   sink_6_124678(const          A&);  // { dg-error "" }
174 four  sink_6_124678(const volatile A&);
175 six   sink_6_124678(const          A&&);  // { dg-error "" }
176 seven sink_6_124678(volatile       A&&);  // { dg-error "" }
177 eight sink_6_124678(const volatile A&&);  // { dg-error "" }
178
179 int test6_124678()
180 {
181                    A a;
182     const          A ca = a;
183           volatile A va;
184     const volatile A cva = a;
185     sink_6_124678(source());  // { dg-error "ambiguous" }
186     return 0;
187 }
188
189 one   sink_6_123678(               A&);
190 two   sink_6_123678(const          A&);  // { dg-error "" }
191 three sink_6_123678(volatile       A&);
192 six   sink_6_123678(const          A&&);  // { dg-error "" }
193 seven sink_6_123678(volatile       A&&);  // { dg-error "" }
194 eight sink_6_123678(const volatile A&&);  // { dg-error "" }
195
196 int test6_123678()
197 {
198                    A a;
199     const          A ca = a;
200           volatile A va;
201     const volatile A cva = a;
202     sink_6_123678(source());  // { dg-error "ambiguous" }
203     return 0;
204 }
205
206 one   sink_6_123567(               A&);  // { dg-error "" }
207 two   sink_6_123567(const          A&);  // { dg-error "" }
208 three sink_6_123567(volatile       A&);  // { dg-error "" }
209 five  sink_6_123567(               A&&);  // { dg-error "" }
210 six   sink_6_123567(const          A&&);  // { dg-error "" }
211 seven sink_6_123567(volatile       A&&);  // { dg-error "" }
212
213 int test6_123567()
214 {
215                    A a;
216     const          A ca = a;
217           volatile A va;
218     const volatile A cva = a;
219     sink_6_123567(cva);          // { dg-error "no match" }
220     sink_6_123567(cv_source());  // { dg-error "no match" }
221     return 0;
222 }
223
224 one   sink_6_123467(               A&);  // { dg-error "" }
225 two   sink_6_123467(const          A&);  // { dg-error "" }
226 three sink_6_123467(volatile       A&);  // { dg-error "" }
227 four  sink_6_123467(const volatile A&);  // { dg-error "" }
228 six   sink_6_123467(const          A&&);  // { dg-error "" }
229 seven sink_6_123467(volatile       A&&);  // { dg-error "" }
230
231 int test6_123467()
232 {
233                    A a;
234     const          A ca = a;
235           volatile A va;
236     const volatile A cva = a;
237     sink_6_123467(source());     // { dg-error "ambiguous" }
238     sink_6_123467(cv_source());  // { dg-error "no match" }
239     return 0;
240 }
241
242 one   sink_6_124567(               A&);  // { dg-error "" }
243 two   sink_6_124567(const          A&);  // { dg-error "" }
244 four  sink_6_124567(const volatile A&);  // { dg-error "" }
245 five  sink_6_124567(               A&&);  // { dg-error "" }
246 six   sink_6_124567(const          A&&);  // { dg-error "" }
247 seven sink_6_124567(volatile       A&&);  // { dg-error "" }
248
249 int test6_124567()
250 {
251                    A a;
252     const          A ca = a;
253           volatile A va;
254     const volatile A cva = a;
255     sink_6_124567(cv_source());  // { dg-error "no match" }
256     return 0;
257 }
258
259 one   sink_6_134567(               A&);  // { dg-error "" }
260 three sink_6_134567(volatile       A&);  // { dg-error "" }
261 four  sink_6_134567(const volatile A&);  // { dg-error "" }
262 five  sink_6_134567(               A&&);  // { dg-error "" }
263 six   sink_6_134567(const          A&&);  // { dg-error "" }
264 seven sink_6_134567(volatile       A&&);  // { dg-error "" }
265
266 int test6_134567()
267 {
268                    A a;
269     const          A ca = a;
270           volatile A va;
271     const volatile A cva = a;
272     sink_6_134567(cv_source());  // { dg-error "no match" }
273     return 0;
274 }
275
276 int main()
277 {
278     return test6_235678() + test6_234678() + test6_234578() + test6_234568() +
279            test6_234567() + test6_134678() + test6_124678() + test6_123678() +
280            test6_123567();
281 }