OSDN Git Service

PR c++/37256
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / cpp0x / rv3n.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 // 3 at a time
32
33 one   sink_3_123(               A&);  // { dg-message "candidates" }
34 two   sink_3_123(const          A&);  // { dg-message "note" }
35 three sink_3_123(volatile       A&);  // { dg-message "note" }
36
37 int test3_123()
38 {
39                    A a;
40     const          A ca = a;
41           volatile A va;
42     const volatile A cva = a;
43     sink_3_123(cva);          // { dg-error "no match" }
44     sink_3_123(v_source());   // { dg-error "no match" }
45     sink_3_123(cv_source());  // { dg-error "no match" }
46     return 0;
47 }
48
49 one   sink_3_125(               A&);  // { dg-message "candidates" }
50 two   sink_3_125(const          A&);  // { dg-message "note" }
51 five  sink_3_125(               A&&);  // { dg-message "note" }
52
53 one   sink_3_124(               A&);  // { dg-message "candidates" }
54 two   sink_3_124(const          A&);  // { dg-message "note" }
55 four  sink_3_124(const volatile A&);  // { dg-message "note" }
56
57 int test3_124()
58 {
59                    A a;
60     const          A ca = a;
61           volatile A va;
62     const volatile A cva = a;
63     sink_3_124(v_source());   // { dg-error "no match" }
64     sink_3_124(cv_source());  // { dg-error "no match" }
65     return 0;
66 }
67
68 int test3_125()
69 {
70                    A a;
71     const          A ca = a;
72           volatile A va;
73     const volatile A cva = a;
74     sink_3_125(va);           // { dg-error "no match" }
75     sink_3_125(cva);          // { dg-error "no match" }
76     sink_3_125(v_source());   // { dg-error "no match" }
77     sink_3_125(cv_source());  // { dg-error "no match" }
78     return 0;
79 }
80
81 one   sink_3_126(               A&);  // { dg-message "candidates" }
82 two   sink_3_126(const          A&);  // { dg-message "note" }
83 six   sink_3_126(const          A&&);  // { dg-message "note" }
84
85 int test3_126()
86 {
87                    A a;
88     const          A ca = a;
89           volatile A va;
90     const volatile A cva = a;
91     sink_3_126(va);           // { dg-error "no match" }
92     sink_3_126(cva);          // { dg-error "no match" }
93     sink_3_126(v_source());   // { dg-error "no match" }
94     sink_3_126(cv_source());  // { dg-error "no match" }
95     return 0;
96 }
97
98 one   sink_3_127(               A&);  // { dg-message "candidates" }
99 two   sink_3_127(const          A&);  // { dg-message "note" }
100 seven sink_3_127(volatile       A&&);  // { dg-message "note" }
101
102 int test3_127()
103 {
104                    A a;
105     const          A ca = a;
106           volatile A va;
107     const volatile A cva = a;
108     sink_3_127(cva);          // { dg-error "no match" }
109     sink_3_127(cv_source());  // { dg-error "no match" }
110     return 0;
111 }
112
113 one   sink_3_134(               A&);  // { dg-message "candidates" }
114 three sink_3_134(volatile       A&);  // { dg-message "note" }
115 four  sink_3_134(const volatile A&);  // { dg-message "note" }
116
117 int test3_134()
118 {
119                    A a;
120     const          A ca = a;
121           volatile A va;
122     const volatile A cva = a;
123     sink_3_134(source());     // { dg-error "no match" }
124     sink_3_134(c_source());   // { dg-error "no match" }
125     sink_3_134(v_source());   // { dg-error "no match" }
126     sink_3_134(cv_source());  // { dg-error "no match" }
127     return 0;
128 }
129
130 one   sink_3_135(               A&);  // { dg-message "candidates" }
131 three sink_3_135(volatile       A&);  // { dg-message "note" }
132 five  sink_3_135(               A&&);  // { dg-message "note" }
133
134 int test3_135()
135 {
136                    A a;
137     const          A ca = a;
138           volatile A va;
139     const volatile A cva = a;
140     sink_3_135(ca);           // { dg-error "no match" }
141     sink_3_135(cva);          // { dg-error "no match" }
142     sink_3_135(c_source());   // { dg-error "no match" }
143     sink_3_135(v_source());   // { dg-error "no match" }
144     sink_3_135(cv_source());  // { dg-error "no match" }
145     return 0;
146 }
147
148 one   sink_3_136(               A&);  // { dg-message "candidates" }
149 three sink_3_136(volatile       A&);  // { dg-message "note" }
150 six   sink_3_136(const          A&&);  // { dg-message "note" }
151
152 int test3_136()
153 {
154                    A a;
155     const          A ca = a;
156           volatile A va;
157     const volatile A cva = a;
158     sink_3_136(cva);          // { dg-error "no match" }
159     sink_3_136(v_source());   // { dg-error "no match" }
160     sink_3_136(cv_source());  // { dg-error "no match" }
161     return 0;
162 }
163
164 one   sink_3_137(               A&);  // { dg-message "candidates" }
165 three sink_3_137(volatile       A&);  // { dg-message "note" }
166 seven sink_3_137(volatile       A&&);  // { dg-message "note" }
167
168 int test3_137()
169 {
170                    A a;
171     const          A ca = a;
172           volatile A va;
173     const volatile A cva = a;
174     sink_3_137(ca);           // { dg-error "no match" }
175     sink_3_137(cva);          // { dg-error "no match" }
176     sink_3_137(c_source());   // { dg-error "no match" }
177     sink_3_137(cv_source());  // { dg-error "no match" }
178     return 0;
179 }
180
181 one   sink_3_145(               A&);  // { dg-message "candidates" }
182 four  sink_3_145(const volatile A&);  // { dg-message "note" }
183 five  sink_3_145(               A&&);  // { dg-message "note" }
184
185 int test3_145()
186 {
187                    A a;
188     const          A ca = a;
189           volatile A va;
190     const volatile A cva = a;
191     sink_3_145(c_source());   // { dg-error "no match" }
192     sink_3_145(v_source());   // { dg-error "no match" }
193     sink_3_145(cv_source());  // { dg-error "no match" }
194     return 0;
195 }
196
197 one   sink_3_146(               A&);  // { dg-message "candidates" }
198 four  sink_3_146(const volatile A&);  // { dg-message "note" }
199 six   sink_3_146(const          A&&);  // { dg-message "note" }
200
201 int test3_146()
202 {
203                    A a;
204     const          A ca = a;
205           volatile A va;
206     const volatile A cva = a;
207     sink_3_146(v_source());   // { dg-error "no match" }
208     sink_3_146(cv_source());  // { dg-error "no match" }
209     return 0;
210 }
211
212 one   sink_3_147(               A&);  // { dg-message "candidates" }
213 four  sink_3_147(const volatile A&);  // { dg-message "note" }
214 seven sink_3_147(volatile       A&&);  // { dg-message "note" }
215
216 int test3_147()
217 {
218                    A a;
219     const          A ca = a;
220           volatile A va;
221     const volatile A cva = a;
222     sink_3_147(c_source());   // { dg-error "no match" }
223     sink_3_147(cv_source());  // { dg-error "no match" }
224     return 0;
225 }
226
227 one   sink_3_156(               A&);  // { dg-message "candidates" }
228 five  sink_3_156(               A&&);  // { dg-message "note" }
229 six   sink_3_156(const          A&&);  // { dg-message "note" }
230
231 int test3_156()
232 {
233                    A a;
234     const          A ca = a;
235           volatile A va;
236     const volatile A cva = a;
237     sink_3_156(va);           // { dg-error "no match" }
238     sink_3_156(cva);          // { dg-error "no match" }
239     sink_3_156(v_source());   // { dg-error "no match" }
240     sink_3_156(cv_source());  // { dg-error "no match" }
241     return 0;
242 }
243
244 one   sink_3_157(               A&);  // { dg-message "candidates" }
245 five  sink_3_157(               A&&);  // { dg-message "note" }
246 seven sink_3_157(volatile       A&&);  // { dg-message "note" }
247
248 int test3_157()
249 {
250                    A a;
251     const          A ca = a;
252           volatile A va;
253     const volatile A cva = a;
254     sink_3_157(ca);           // { dg-error "no match" }
255     sink_3_157(cva);          // { dg-error "no match" }
256     sink_3_157(c_source());   // { dg-error "no match" }
257     sink_3_157(cv_source());  // { dg-error "no match" }
258     return 0;
259 }
260
261 one   sink_3_167(               A&);  // { dg-message "candidates" }
262 six   sink_3_167(const          A&&);  // { dg-message "note" }
263 seven sink_3_167(volatile       A&&);  // { dg-message "note" }
264
265 int test3_167()
266 {
267                    A a;
268     const          A ca = a;
269           volatile A va;
270     const volatile A cva = a;
271     sink_3_167(cva);          // { dg-error "no match" }
272     sink_3_167(source());     // { dg-error "ambiguous" }
273     sink_3_167(cv_source());  // { dg-error "no match" }
274     return 0;
275 }
276
277 two   sink_3_234(const          A&);  // { dg-message "candidates" }
278 three sink_3_234(volatile       A&);  // { dg-message "note" }
279 four  sink_3_234(const volatile A&);  // { dg-message "note" }
280
281 int test3_234()
282 {
283                    A a;
284     const          A ca = a;
285           volatile A va;
286     const volatile A cva = a;
287     sink_3_234(a);            // { dg-error "ambiguous" }
288     sink_3_234(v_source());   // { dg-error "no match" }
289     sink_3_234(cv_source());  // { dg-error "no match" }
290     return 0;
291 }
292
293 two   sink_3_235(const          A&);  // { dg-message "candidates" }
294 three sink_3_235(volatile       A&);  // { dg-message "note" }
295 five  sink_3_235(               A&&);  // { dg-message "note" }
296
297 int test3_235()
298 {
299                    A a;
300     const          A ca = a;
301           volatile A va;
302     const volatile A cva = a;
303     sink_3_235(a);            // { dg-error "ambiguous" }
304     sink_3_235(cva);          // { dg-error "no match" }
305     sink_3_235(v_source());   // { dg-error "no match" }
306     sink_3_235(cv_source());  // { dg-error "no match" }
307     return 0;
308 }
309
310 two   sink_3_236(const          A&);  // { dg-message "candidates" }
311 three sink_3_236(volatile       A&);  // { dg-message "note" }
312 six   sink_3_236(const          A&&);  // { dg-message "note" }
313
314 int test3_236()
315 {
316                    A a;
317     const          A ca = a;
318           volatile A va;
319     const volatile A cva = a;
320     sink_3_236(a);            // { dg-error "ambiguous" }
321     sink_3_236(cva);          // { dg-error "no match" }
322     sink_3_236(v_source());   // { dg-error "no match" }
323     sink_3_236(cv_source());  // { dg-error "no match" }
324     return 0;
325 }
326
327 two   sink_3_237(const          A&);  // { dg-message "candidates" }
328 three sink_3_237(volatile       A&);  // { dg-message "note" }
329 seven sink_3_237(volatile       A&&);  // { dg-message "note" }
330
331 int test3_237()
332 {
333                    A a;
334     const          A ca = a;
335           volatile A va;
336     const volatile A cva = a;
337     sink_3_237(a);            // { dg-error "ambiguous" }
338     sink_3_237(cva);          // { dg-error "no match" }
339     sink_3_237(cv_source());  // { dg-error "no match" }
340     return 0;
341 }
342
343 two   sink_3_238(const          A&);  // { dg-message "candidates" }
344 three sink_3_238(volatile       A&);  // { dg-message "note" }
345 eight sink_3_238(const volatile A&&);  // { dg-message "note" }
346
347 int test3_238()
348 {
349                    A a;
350     const          A ca = a;
351           volatile A va;
352     const volatile A cva = a;
353     sink_3_238(a);  // { dg-error "ambiguous" }
354     return 0;
355 }
356
357 two   sink_3_245(const          A&);  // { dg-message "candidates" }
358 four  sink_3_245(const volatile A&);  // { dg-message "note" }
359 five  sink_3_245(               A&&);  // { dg-message "note" }
360
361 int test3_245()
362 {
363                    A a;
364     const          A ca = a;
365           volatile A va;
366     const volatile A cva = a;
367     sink_3_245(v_source());   // { dg-error "no match" }
368     sink_3_245(cv_source());  // { dg-error "no match" }
369     return 0;
370 }
371
372 two   sink_3_246(const          A&);  // { dg-message "candidates" }
373 four  sink_3_246(const volatile A&);  // { dg-message "note" }
374 six   sink_3_246(const          A&&);  // { dg-message "note" }
375
376 int test3_246()
377 {
378                    A a;
379     const          A ca = a;
380           volatile A va;
381     const volatile A cva = a;
382     sink_3_246(v_source());   // { dg-error "no match" }
383     sink_3_246(cv_source());  // { dg-error "no match" }
384     return 0;
385 }
386
387 two   sink_3_247(const          A&);  // { dg-message "candidates" }
388 four  sink_3_247(const volatile A&);  // { dg-message "note" }
389 seven sink_3_247(volatile       A&&);  // { dg-message "note" }
390
391 int test3_247()
392 {
393                    A a;
394     const          A ca = a;
395           volatile A va;
396     const volatile A cva = a;
397     sink_3_247(cv_source());  // { dg-error "no match" }
398     return 0;
399 }
400
401 two   sink_3_256(const          A&);  // { dg-message "candidates" }
402 five  sink_3_256(               A&&);  // { dg-message "note" }
403 six   sink_3_256(const          A&&);  // { dg-message "note" }
404
405 int test3_256()
406 {
407                    A a;
408     const          A ca = a;
409           volatile A va;
410     const volatile A cva = a;
411     sink_3_256(va);           // { dg-error "no match" }
412     sink_3_256(cva);          // { dg-error "no match" }
413     sink_3_256(v_source());   // { dg-error "no match" }
414     sink_3_256(cv_source());  // { dg-error "no match" }
415     return 0;
416 }
417
418 two   sink_3_257(const          A&);  // { dg-message "candidates" }
419 five  sink_3_257(               A&&);  // { dg-message "note" }
420 seven sink_3_257(volatile       A&&);  // { dg-message "note" }
421
422 int test3_257()
423 {
424                    A a;
425     const          A ca = a;
426           volatile A va;
427     const volatile A cva = a;
428     sink_3_257(cva);          // { dg-error "no match" }
429     sink_3_257(cv_source());  // { dg-error "no match" }
430     return 0;
431 }
432
433 two   sink_3_267(const          A&);  // { dg-message "candidates" }
434 six   sink_3_267(const          A&&);  // { dg-message "note" }
435 seven sink_3_267(volatile       A&&);  // { dg-message "note" }
436
437 int test3_267()
438 {
439                    A a;
440     const          A ca = a;
441           volatile A va;
442     const volatile A cva = a;
443     sink_3_267(cva);          // { dg-error "no match" }
444     sink_3_267(source());     // { dg-error "ambiguous" }
445     sink_3_267(cv_source());  // { dg-error "no match" }
446     return 0;
447 }
448
449 three sink_3_345(volatile       A&);  // { dg-message "candidates" }
450 four  sink_3_345(const volatile A&);  // { dg-message "note" }
451 five  sink_3_345(               A&&);  // { dg-message "note" }
452
453 int test3_345()
454 {
455                    A a;
456     const          A ca = a;
457           volatile A va;
458     const volatile A cva = a;
459     sink_3_345(c_source());   // { dg-error "no match" }
460     sink_3_345(v_source());   // { dg-error "no match" }
461     sink_3_345(cv_source());  // { dg-error "no match" }
462     return 0;
463 }
464
465 three sink_3_346(volatile       A&);  // { dg-message "candidates" }
466 four  sink_3_346(const volatile A&);  // { dg-message "note" }
467 six   sink_3_346(const          A&&);  // { dg-message "note" }
468
469 int test3_346()
470 {
471                    A a;
472     const          A ca = a;
473           volatile A va;
474     const volatile A cva = a;
475     sink_3_346(v_source());   // { dg-error "no match" }
476     sink_3_346(cv_source());  // { dg-error "no match" }
477     return 0;
478 }
479
480 three sink_3_347(volatile       A&);  // { dg-message "candidates" }
481 four  sink_3_347(const volatile A&);  // { dg-message "note" }
482 seven sink_3_347(volatile       A&&);  // { dg-message "note" }
483
484 int test3_347()
485 {
486                    A a;
487     const          A ca = a;
488           volatile A va;
489     const volatile A cva = a;
490     sink_3_347(c_source());   // { dg-error "no match" }
491     sink_3_347(cv_source());  // { dg-error "no match" }
492     return 0;
493 }
494
495 three sink_3_356(volatile       A&);  // { dg-message "candidates" }
496 five  sink_3_356(               A&&);  // { dg-message "note" }
497 six   sink_3_356(const          A&&);  // { dg-message "note" }
498
499 int test3_356()
500 {
501                    A a;
502     const          A ca = a;
503           volatile A va;
504     const volatile A cva = a;
505     sink_3_356(cva);          // { dg-error "no match" }
506     sink_3_356(v_source());   // { dg-error "no match" }
507     sink_3_356(cv_source());  // { dg-error "no match" }
508     return 0;
509 }
510
511 three sink_3_357(volatile       A&);  // { dg-message "candidates" }
512 five  sink_3_357(               A&&);  // { dg-message "note" }
513 seven sink_3_357(volatile       A&&);  // { dg-message "note" }
514
515 int test3_357()
516 {
517                    A a;
518     const          A ca = a;
519           volatile A va;
520     const volatile A cva = a;
521     sink_3_357(ca);           // { dg-error "no match" }
522     sink_3_357(cva);          // { dg-error "no match" }
523     sink_3_357(c_source());   // { dg-error "no match" }
524     sink_3_357(cv_source());  // { dg-error "no match" }
525     return 0;
526 }
527
528 three sink_3_367(volatile       A&);  // { dg-message "candidates" }
529 six   sink_3_367(const          A&&);  // { dg-message "note" }
530 seven sink_3_367(volatile       A&&);  // { dg-message "note" }
531
532 int test3_367()
533 {
534                    A a;
535     const          A ca = a;
536           volatile A va;
537     const volatile A cva = a;
538     sink_3_367(cva);          // { dg-error "no match" }
539     sink_3_367(source());     // { dg-error "ambiguous" }
540     sink_3_367(cv_source());  // { dg-error "no match" }
541     return 0;
542 }
543
544 four  sink_3_456(const volatile A&);  // { dg-message "candidates" }
545 five  sink_3_456(               A&&);  // { dg-message "note" }
546 six   sink_3_456(const          A&&);  // { dg-message "note" }
547
548 int test3_456()
549 {
550                    A a;
551     const          A ca = a;
552           volatile A va;
553     const volatile A cva = a;
554     sink_3_456(v_source());   // { dg-error "no match" }
555     sink_3_456(cv_source());  // { dg-error "no match" }
556     return 0;
557 }
558
559 four  sink_3_457(const volatile A&);  // { dg-message "candidates" }
560 five  sink_3_457(               A&&);  // { dg-message "note" }
561 seven sink_3_457(volatile       A&&);  // { dg-message "note" }
562
563 int test3_457()
564 {
565                    A a;
566     const          A ca = a;
567           volatile A va;
568     const volatile A cva = a;
569     sink_3_457(c_source());   // { dg-error "no match" }
570     sink_3_457(cv_source());  // { dg-error "no match" }
571     return 0;
572 }
573
574 four  sink_3_467(const volatile A&);  // { dg-message "candidates" }
575 six   sink_3_467(const          A&&);  // { dg-message "note" }
576 seven sink_3_467(volatile       A&&);  // { dg-message "note" }
577
578 int test3_467()
579 {
580                    A a;
581     const          A ca = a;
582           volatile A va;
583     const volatile A cva = a;
584     sink_3_467(source());     // { dg-error "ambiguous" }
585     sink_3_467(cv_source());  // { dg-error "no match" }
586     return 0;
587 }
588
589 five  sink_3_567(               A&&);  // { dg-message "candidates" }
590 six   sink_3_567(const          A&&);  // { dg-message "note" }
591 seven sink_3_567(volatile       A&&);  // { dg-message "note" }
592
593 int test3_567()
594 {
595                    A a;
596     const          A ca = a;
597           volatile A va;
598     const volatile A cva = a;
599     sink_3_567(cva);          // { dg-error "no match" }
600     sink_3_567(cv_source());  // { dg-error "no match" }
601     return 0;
602 }
603
604 six   sink_3_678(const          A&&);  // { dg-message "candidates" }
605 seven sink_3_678(volatile       A&&);  // { dg-message "note" }
606 eight sink_3_678(const volatile A&&);  // { dg-message "note" }
607
608 int test3_678()
609 {
610                    A a;
611     const          A ca = a;
612           volatile A va;
613     const volatile A cva = a;
614     sink_3_678(a);          // { dg-error "ambiguous" }
615     sink_3_678(source());   // { dg-error "ambiguous" }
616     return 0;
617 }
618
619 int main()
620 {
621     return test3_123() + test3_125() + test3_126() + test3_127() +
622            test3_135() + test3_136() + test3_137() + test3_156() +
623            test3_157() + test3_167() + test3_234() + test3_235() +
624            test3_236() + test3_237() + test3_238() + test3_256() +
625            test3_257() + test3_267() + test3_356() + test3_357() +
626            test3_367() + test3_467() + test3_567() + test3_678();
627 }