OSDN Git Service

PR c++/37256
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / cpp0x / rv5n.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 // 5 at a time
32
33 one   sink_5_12345(               A&);  // { dg-message "candidates" }
34 two   sink_5_12345(const          A&);  // { dg-message "note" }
35 three sink_5_12345(volatile       A&);  // { dg-message "note" }
36 four  sink_5_12345(const volatile A&);  // { dg-message "note" }
37 five  sink_5_12345(               A&&);  // { dg-message "note" }
38
39 int test5_12345()
40 {
41                    A a;
42     const          A ca = a;
43           volatile A va;
44     const volatile A cva = a;
45     sink_5_12345(v_source());   // { dg-error "no match" }
46     sink_5_12345(cv_source());  // { dg-error "no match" }
47     return 0;
48 }
49
50 one   sink_5_12346(               A&);  // { dg-message "candidates" }
51 two   sink_5_12346(const          A&);  // { dg-message "note" }
52 three sink_5_12346(volatile       A&);  // { dg-message "note" }
53 four  sink_5_12346(const volatile A&);  // { dg-message "note" }
54 six   sink_5_12346(const          A&&);  // { dg-message "note" }
55
56 int test5_12346()
57 {
58                    A a;
59     const          A ca = a;
60           volatile A va;
61     const volatile A cva = a;
62     sink_5_12346(v_source());   // { dg-error "no match" }
63     sink_5_12346(cv_source());  // { dg-error "no match" }
64     return 0;
65 }
66
67 one   sink_5_12347(               A&);  // { dg-message "candidates" }
68 two   sink_5_12347(const          A&);  // { dg-message "note" }
69 three sink_5_12347(volatile       A&);  // { dg-message "note" }
70 four  sink_5_12347(const volatile A&);  // { dg-message "note" }
71 seven sink_5_12347(volatile       A&&);  // { dg-message "note" }
72
73 int test5_12347()
74 {
75                    A a;
76     const          A ca = a;
77           volatile A va;
78     const volatile A cva = a;
79     sink_5_12347(cv_source());  // { dg-error "no match" }
80     return 0;
81 }
82
83 one   sink_5_12356(               A&);  // { dg-message "candidates" }
84 two   sink_5_12356(const          A&);  // { dg-message "note" }
85 three sink_5_12356(volatile       A&);  // { dg-message "note" }
86 five  sink_5_12356(               A&&);  // { dg-message "note" }
87 six   sink_5_12356(const          A&&);  // { dg-message "note" }
88
89 int test5_12356()
90 {
91                    A a;
92     const          A ca = a;
93           volatile A va;
94     const volatile A cva = a;
95     sink_5_12356(cva);          // { dg-error "no match" }
96     sink_5_12356(v_source());   // { dg-error "no match" }
97     sink_5_12356(cv_source());  // { dg-error "no match" }
98     return 0;
99 }
100
101 one   sink_5_12357(               A&);  // { dg-message "candidates" }
102 two   sink_5_12357(const          A&);  // { dg-message "note" }
103 three sink_5_12357(volatile       A&);  // { dg-message "note" }
104 five  sink_5_12357(               A&&);  // { dg-message "note" }
105 seven sink_5_12357(volatile       A&&);  // { dg-message "note" }
106
107 int test5_12357()
108 {
109                    A a;
110     const          A ca = a;
111           volatile A va;
112     const volatile A cva = a;
113     sink_5_12357(cva);          // { dg-error "no match" }
114     sink_5_12357(cv_source());  // { dg-error "no match" }
115     return 0;
116 }
117
118 one   sink_5_12367(               A&);  // { dg-message "candidates" }
119 two   sink_5_12367(const          A&);  // { dg-message "note" }
120 three sink_5_12367(volatile       A&);  // { dg-message "note" }
121 six   sink_5_12367(const          A&&);  // { dg-message "note" }
122 seven sink_5_12367(volatile       A&&);  // { dg-message "note" }
123
124 int test5_12367()
125 {
126                    A a;
127     const          A ca = a;
128           volatile A va;
129     const volatile A cva = a;
130     sink_5_12367(cva);          // { dg-error "no match" }
131     sink_5_12367(source());     // { dg-error "ambiguous" }
132     sink_5_12367(cv_source());  // { dg-error "no match" }
133     return 0;
134 }
135
136 one   sink_5_12456(               A&);  // { dg-message "candidates" }
137 two   sink_5_12456(const          A&);  // { dg-message "note" }
138 four  sink_5_12456(const volatile A&);  // { dg-message "note" }
139 five  sink_5_12456(               A&&);  // { dg-message "note" }
140 six   sink_5_12456(const          A&&);  // { dg-message "note" }
141
142 int test5_12456()
143 {
144                    A a;
145     const          A ca = a;
146           volatile A va;
147     const volatile A cva = a;
148     sink_5_12456(v_source());   // { dg-error "no match" }
149     sink_5_12456(cv_source());  // { dg-error "no match" }
150     return 0;
151 }
152
153 one   sink_5_12457(               A&);  // { dg-message "candidates" }
154 two   sink_5_12457(const          A&);  // { dg-message "note" }
155 four  sink_5_12457(const volatile A&);  // { dg-message "note" }
156 five  sink_5_12457(               A&&);  // { dg-message "note" }
157 seven sink_5_12457(volatile       A&&);  // { dg-message "note" }
158
159 int test5_12457()
160 {
161                    A a;
162     const          A ca = a;
163           volatile A va;
164     const volatile A cva = a;
165     sink_5_12457(cv_source());  // { dg-error "no match" }
166     return 0;
167 }
168
169 one   sink_5_12467(               A&);  // { dg-message "candidates" }
170 two   sink_5_12467(const          A&);  // { dg-message "note" }
171 four  sink_5_12467(const volatile A&);  // { dg-message "note" }
172 six   sink_5_12467(const          A&&);  // { dg-message "note" }
173 seven sink_5_12467(volatile       A&&);  // { dg-message "note" }
174
175 int test5_12467()
176 {
177                    A a;
178     const          A ca = a;
179           volatile A va;
180     const volatile A cva = a;
181     sink_5_12467(source());     // { dg-error "ambiguous" }
182     sink_5_12467(cv_source());  // { dg-error "no match" }
183     return 0;
184 }
185
186 one   sink_5_12567(               A&);  // { dg-message "candidates" }
187 two   sink_5_12567(const          A&);  // { dg-message "note" }
188 five  sink_5_12567(               A&&);  // { dg-message "note" }
189 six   sink_5_12567(const          A&&);  // { dg-message "note" }
190 seven sink_5_12567(volatile       A&&);  // { dg-message "note" }
191
192 int test5_12567()
193 {
194                    A a;
195     const          A ca = a;
196           volatile A va;
197     const volatile A cva = a;
198     sink_5_12567(cva);          // { dg-error "no match" }
199     sink_5_12567(cv_source());  // { dg-error "no match" }
200     return 0;
201 }
202
203 one   sink_5_12678(               A&);
204 two   sink_5_12678(const          A&);  // { dg-message "candidates" }
205 six   sink_5_12678(const          A&&);  // { dg-message "note" }
206 seven sink_5_12678(volatile       A&&);  // { dg-message "note" }
207 eight sink_5_12678(const volatile A&&);  // { dg-message "note" }
208
209 int test5_12678()
210 {
211                    A a;
212     const          A ca = a;
213           volatile A va;
214     const volatile A cva = a;
215     sink_5_12678(source());  // { dg-error "ambiguous" }
216     return 0;
217 }
218
219 one   sink_5_13456(               A&);  // { dg-message "candidates" }
220 three sink_5_13456(volatile       A&);  // { dg-message "note" }
221 four  sink_5_13456(const volatile A&);  // { dg-message "note" }
222 five  sink_5_13456(               A&&);  // { dg-message "note" }
223 six   sink_5_13456(const          A&&);  // { dg-message "note" }
224
225 int test5_13456()
226 {
227                    A a;
228     const          A ca = a;
229           volatile A va;
230     const volatile A cva = a;
231     sink_5_13456(v_source());   // { dg-error "no match" }
232     sink_5_13456(cv_source());  // { dg-error "no match" }
233     return 0;
234 }
235
236 one   sink_5_13457(               A&);  // { dg-message "candidates" }
237 three sink_5_13457(volatile       A&);  // { dg-message "note" }
238 four  sink_5_13457(const volatile A&);  // { dg-message "note" }
239 five  sink_5_13457(               A&&);  // { dg-message "note" }
240 seven sink_5_13457(volatile       A&&);  // { dg-message "note" }
241
242 int test5_13457()
243 {
244                    A a;
245     const          A ca = a;
246           volatile A va;
247     const volatile A cva = a;
248     sink_5_13457(c_source());   // { dg-error "no match" }
249     sink_5_13457(cv_source());  // { dg-error "no match" }
250     return 0;
251 }
252
253 one   sink_5_13467(               A&);  // { dg-message "candidates" }
254 three sink_5_13467(volatile       A&);  // { dg-message "note" }
255 four  sink_5_13467(const volatile A&);  // { dg-message "note" }
256 six   sink_5_13467(const          A&&);  // { dg-message "note" }
257 seven sink_5_13467(volatile       A&&);  // { dg-message "note" }
258
259 int test5_13467()
260 {
261                    A a;
262     const          A ca = a;
263           volatile A va;
264     const volatile A cva = a;
265     sink_5_13467(source());     // { dg-error "ambiguous" }
266     sink_5_13467(cv_source());  // { dg-error "no match" }
267     return 0;
268 }
269
270 one   sink_5_13567(               A&);  // { dg-message "candidates" }
271 three sink_5_13567(volatile       A&);  // { dg-message "note" }
272 five  sink_5_13567(               A&&);  // { dg-message "note" }
273 six   sink_5_13567(const          A&&);  // { dg-message "note" }
274 seven sink_5_13567(volatile       A&&);  // { dg-message "note" }
275
276 int test5_13567()
277 {
278                    A a;
279     const          A ca = a;
280           volatile A va;
281     const volatile A cva = a;
282     sink_5_13567(cva);          // { dg-error "no match" }
283     sink_5_13567(cv_source());  // { dg-error "no match" }
284     return 0;
285 }
286
287 one   sink_5_13678(               A&);
288 three sink_5_13678(volatile       A&);
289 six   sink_5_13678(const          A&&);  // { dg-message "candidates" }
290 seven sink_5_13678(volatile       A&&);  // { dg-message "note" }
291 eight sink_5_13678(const volatile A&&);  // { dg-message "note" }
292
293 int test5_13678()
294 {
295                    A a;
296     const          A ca = a;
297           volatile A va;
298     const volatile A cva = a;
299     sink_5_13678(source());  // { dg-error "ambiguous" }
300     return 0;
301 }
302
303 one   sink_5_14567(               A&);  // { dg-message "candidates" }
304 four  sink_5_14567(const volatile A&);  // { dg-message "note" }
305 five  sink_5_14567(               A&&);  // { dg-message "note" }
306 six   sink_5_14567(const          A&&);  // { dg-message "note" }
307 seven sink_5_14567(volatile       A&&);  // { dg-message "note" }
308
309 int test5_14567()
310 {
311                    A a;
312     const          A ca = a;
313           volatile A va;
314     const volatile A cva = a;
315     sink_5_14567(cv_source());  // { dg-error "no match" }
316     return 0;
317 }
318
319 one   sink_5_14678(               A&);
320 four  sink_5_14678(const volatile A&);
321 six   sink_5_14678(const          A&&);  // { dg-message "candidates" }
322 seven sink_5_14678(volatile       A&&);  // { dg-message "note" }
323 eight sink_5_14678(const volatile A&&);  // { dg-message "note" }
324
325 int test5_14678()
326 {
327                    A a;
328     const          A ca = a;
329           volatile A va;
330     const volatile A cva = a;
331     sink_5_14678(source());  // { dg-error "ambiguous" }
332     return 0;
333 }
334
335 two   sink_5_23456(const          A&);  // { dg-message "candidates" }
336 three sink_5_23456(volatile       A&);  // { dg-message "note" }
337 four  sink_5_23456(const volatile A&);  // { dg-message "note" }
338 five  sink_5_23456(               A&&);  // { dg-message "note" }
339 six   sink_5_23456(const          A&&);  // { dg-message "note" }
340
341 int test5_23456()
342 {
343                    A a;
344     const          A ca = a;
345           volatile A va;
346     const volatile A cva = a;
347     sink_5_23456(a);            // { dg-error "ambiguous" }
348     sink_5_23456(v_source());   // { dg-error "no match" }
349     sink_5_23456(cv_source());  // { dg-error "no match" }
350     return 0;
351 }
352
353 two   sink_5_23457(const          A&);  // { dg-message "candidates" }
354 three sink_5_23457(volatile       A&);  // { dg-message "note" }
355 four  sink_5_23457(const volatile A&);  // { dg-message "note" }
356 five  sink_5_23457(               A&&);  // { dg-message "note" }
357 seven sink_5_23457(volatile       A&&);  // { dg-message "note" }
358
359 int test5_23457()
360 {
361                    A a;
362     const          A ca = a;
363           volatile A va;
364     const volatile A cva = a;
365     sink_5_23457(a);            // { dg-error "ambiguous" }
366     sink_5_23457(cv_source());  // { dg-error "no match" }
367     return 0;
368 }
369
370 two   sink_5_23458(const          A&);  // { dg-message "candidates" }
371 three sink_5_23458(volatile       A&);  // { dg-message "note" }
372 four  sink_5_23458(const volatile A&);  // { dg-message "note" }
373 five  sink_5_23458(               A&&);  // { dg-message "note" }
374 eight sink_5_23458(const volatile A&&);  // { dg-message "note" }
375
376 int test5_23458()
377 {
378                    A a;
379     const          A ca = a;
380           volatile A va;
381     const volatile A cva = a;
382     sink_5_23458(a);  // { dg-error "ambiguous" }
383     return 0;
384 }
385
386 two   sink_5_23467(const          A&);  // { dg-message "candidates" }
387 three sink_5_23467(volatile       A&);  // { dg-message "note" }
388 four  sink_5_23467(const volatile A&);  // { dg-message "note" }
389 six   sink_5_23467(const          A&&);  // { dg-message "note" }
390 seven sink_5_23467(volatile       A&&);  // { dg-message "note" }
391
392 int test5_23467()
393 {
394                    A a;
395     const          A ca = a;
396           volatile A va;
397     const volatile A cva = a;
398     sink_5_23467(a);            // { dg-error "ambiguous" }
399     sink_5_23467(source());     // { dg-error "ambiguous" }
400     sink_5_23467(cv_source());  // { dg-error "no match" }
401     return 0;
402 }
403
404 two   sink_5_23468(const          A&);  // { dg-message "candidates" }
405 three sink_5_23468(volatile       A&);  // { dg-message "note" }
406 four  sink_5_23468(const volatile A&);  // { dg-message "note" }
407 six   sink_5_23468(const          A&&);  // { dg-message "note" }
408 eight sink_5_23468(const volatile A&&);  // { dg-message "note" }
409
410 int test5_23468()
411 {
412                    A a;
413     const          A ca = a;
414           volatile A va;
415     const volatile A cva = a;
416     sink_5_23468(a);  // { dg-error "ambiguous" }
417    return 0;
418 }
419
420 two   sink_5_23478(const          A&);  // { dg-message "candidates" }
421 three sink_5_23478(volatile       A&);  // { dg-message "note" }
422 four  sink_5_23478(const volatile A&);  // { dg-message "note" }
423 seven sink_5_23478(volatile       A&&);  // { dg-message "note" }
424 eight sink_5_23478(const volatile A&&);  // { dg-message "note" }
425
426 int test5_23478()
427 {
428                    A a;
429     const          A ca = a;
430           volatile A va;
431     const volatile A cva = a;
432     sink_5_23478(a);  // { dg-error "ambiguous" }
433     return 0;
434 }
435
436 two   sink_5_23567(const          A&);  // { dg-message "candidates" }
437 three sink_5_23567(volatile       A&);  // { dg-message "note" }
438 five  sink_5_23567(               A&&);  // { dg-message "note" }
439 six   sink_5_23567(const          A&&);  // { dg-message "note" }
440 seven sink_5_23567(volatile       A&&);  // { dg-message "note" }
441
442 int test5_23567()
443 {
444                    A a;
445     const          A ca = a;
446           volatile A va;
447     const volatile A cva = a;
448     sink_5_23567(a);            // { dg-error "ambiguous" }
449     sink_5_23567(cva);          // { dg-error "no match" }
450     sink_5_23567(cv_source());  // { dg-error "no match" }
451     return 0;
452 }
453
454 two   sink_5_23568(const          A&);  // { dg-message "candidates" }
455 three sink_5_23568(volatile       A&);  // { dg-message "note" }
456 five  sink_5_23568(               A&&);  // { dg-message "note" }
457 six   sink_5_23568(const          A&&);  // { dg-message "note" }
458 eight sink_5_23568(const volatile A&&);  // { dg-message "note" }
459
460 int test5_23568()
461 {
462                    A a;
463     const          A ca = a;
464           volatile A va;
465     const volatile A cva = a;
466     sink_5_23568(a);  // { dg-error "ambiguous" }
467     return 0;
468 }
469
470 two   sink_5_23578(const          A&);  // { dg-message "candidates" }
471 three sink_5_23578(volatile       A&);  // { dg-message "note" }
472 five  sink_5_23578(               A&&);  // { dg-message "note" }
473 seven sink_5_23578(volatile       A&&);  // { dg-message "note" }
474 eight sink_5_23578(const volatile A&&);  // { dg-message "note" }
475
476 int test5_23578()
477 {
478                    A a;
479     const          A ca = a;
480           volatile A va;
481     const volatile A cva = a;
482     sink_5_23578(a);  // { dg-error "ambiguous" }
483     return 0;
484 }
485
486 two   sink_5_23678(const          A&);  // { dg-message "candidates" }
487 three sink_5_23678(volatile       A&);  // { dg-message "note" }
488 six   sink_5_23678(const          A&&);  // { dg-message "note" }
489 seven sink_5_23678(volatile       A&&);  // { dg-message "note" }
490 eight sink_5_23678(const volatile A&&);  // { dg-message "note" }
491
492 int test5_23678()
493 {
494                    A a;
495     const          A ca = a;
496           volatile A va;
497     const volatile A cva = a;
498     sink_5_23678(a);         // { dg-error "ambiguous" }
499     sink_5_23678(source());  // { dg-error "ambiguous" }
500     return 0;
501 }
502
503 two   sink_5_24567(const          A&);  // { dg-message "candidates" }
504 four  sink_5_24567(const volatile A&);  // { dg-message "note" }
505 five  sink_5_24567(               A&&);  // { dg-message "note" }
506 six   sink_5_24567(const          A&&);  // { dg-message "note" }
507 seven sink_5_24567(volatile       A&&);  // { dg-message "note" }
508
509 int test5_24567()
510 {
511                    A a;
512     const          A ca = a;
513           volatile A va;
514     const volatile A cva = a;
515     sink_5_24567(cv_source());  // { dg-error "no match" }
516     return 0;
517 }
518
519 two   sink_5_24678(const          A&);  // { dg-message "candidates" }
520 four  sink_5_24678(const volatile A&);
521 six   sink_5_24678(const          A&&);  // { dg-message "note" }
522 seven sink_5_24678(volatile       A&&);  // { dg-message "note" }
523 eight sink_5_24678(const volatile A&&);  // { dg-message "note" }
524
525 int test5_24678()
526 {
527                    A a;
528     const          A ca = a;
529           volatile A va;
530     const volatile A cva = a;
531     sink_5_24678(source());  // { dg-error "ambiguous" }
532     return 0;
533 }
534
535 three sink_5_34567(volatile       A&);  // { dg-message "candidates" }
536 four  sink_5_34567(const volatile A&);  // { dg-message "note" }
537 five  sink_5_34567(               A&&);  // { dg-message "note" }
538 six   sink_5_34567(const          A&&);  // { dg-message "note" }
539 seven sink_5_34567(volatile       A&&);  // { dg-message "note" }
540
541 int test5_34567()
542 {
543                    A a;
544     const          A ca = a;
545           volatile A va;
546     const volatile A cva = a;
547     sink_5_34567(cv_source());  // { dg-error "no match" }
548     return 0;
549 }
550
551 three sink_5_34678(volatile       A&);
552 four  sink_5_34678(const volatile A&);
553 six   sink_5_34678(const          A&&);  // { dg-message "candidates" }
554 seven sink_5_34678(volatile       A&&);  // { dg-message "note" }
555 eight sink_5_34678(const volatile A&&);  // { dg-message "note" }
556
557 int test5_34678()
558 {
559                    A a;
560     const          A ca = a;
561           volatile A va;
562     const volatile A cva = a;
563     sink_5_34678(source());  // { dg-error "ambiguous" }
564     return 0;
565 }
566
567 int main()
568 {
569     return test5_12356() + test5_12357() + test5_12367() + test5_12467() +
570            test5_12567() + test5_12678() + test5_13467() + test5_13567() +
571            test5_13678() + test5_13678() + test5_23456() + test5_23457() +
572            test5_23458() + test5_23467() + test5_23468() + test5_23478() +
573            test5_23567() + test5_23568() + test5_23578() + test5_23678() +
574            test5_24678() + test5_34678();
575 }