1 // I, Howard Hinnant, hereby place this code in the public domain.
3 // Test overlaod resolution among referece types
6 // { dg-options "-std=c++0x" }
8 template <bool> struct sa;
9 template <> struct sa<true> {};
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];};
23 A(const volatile A&&);
28 volatile A v_source();
29 const volatile A cv_source();
33 one sink_4_1234( A&); // { dg-error "" }
34 two sink_4_1234(const A&); // { dg-error "" }
35 three sink_4_1234(volatile A&); // { dg-error "" }
36 four sink_4_1234(const volatile A&); // { dg-error "" }
43 const volatile A cva = a;
44 sink_4_1234(v_source()); // { dg-error "no match" }
45 sink_4_1234(cv_source()); // { dg-error "no match" }
49 one sink_4_1235( A&); // { dg-error "" }
50 two sink_4_1235(const A&); // { dg-error "" }
51 three sink_4_1235(volatile A&); // { dg-error "" }
52 five sink_4_1235( A&&); // { dg-error "" }
59 const volatile A cva = a;
60 sink_4_1235(cva); // { dg-error "no match" }
61 sink_4_1235(v_source()); // { dg-error "no match" }
62 sink_4_1235(cv_source()); // { dg-error "no match" }
66 one sink_4_1236( A&); // { dg-error "" }
67 two sink_4_1236(const A&); // { dg-error "" }
68 three sink_4_1236(volatile A&); // { dg-error "" }
69 six sink_4_1236(const A&&); // { dg-error "" }
76 const volatile A cva = a;
77 sink_4_1236(cva); // { dg-error "no match" }
78 sink_4_1236(v_source()); // { dg-error "no match" }
79 sink_4_1236(cv_source()); // { dg-error "no match" }
83 one sink_4_1237( A&); // { dg-error "" }
84 two sink_4_1237(const A&); // { dg-error "" }
85 three sink_4_1237(volatile A&); // { dg-error "" }
86 seven sink_4_1237(volatile A&&); // { dg-error "" }
93 const volatile A cva = a;
94 sink_4_1237(cva); // { dg-error "no match" }
95 sink_4_1237(cv_source()); // { dg-error "no match" }
99 one sink_4_1245( A&); // { dg-error "" }
100 two sink_4_1245(const A&); // { dg-error "" }
101 four sink_4_1245(const volatile A&); // { dg-error "" }
102 five sink_4_1245( A&&); // { dg-error "" }
109 const volatile A cva = a;
110 sink_4_1245(v_source()); // { dg-error "no match" }
111 sink_4_1245(cv_source()); // { dg-error "no match" }
115 one sink_4_1246( A&); // { dg-error "" }
116 two sink_4_1246(const A&); // { dg-error "" }
117 four sink_4_1246(const volatile A&); // { dg-error "" }
118 six sink_4_1246(const A&&); // { dg-error "" }
125 const volatile A cva = a;
126 sink_4_1246(v_source()); // { dg-error "no match" }
127 sink_4_1246(cv_source()); // { dg-error "no match" }
131 one sink_4_1247( A&); // { dg-error "" }
132 two sink_4_1247(const A&); // { dg-error "" }
133 four sink_4_1247(const volatile A&); // { dg-error "" }
134 seven sink_4_1247(volatile A&&); // { dg-error "" }
141 const volatile A cva = a;
142 sink_4_1247(cv_source()); // { dg-error "no match" }
146 one sink_4_1256( A&); // { dg-error "" }
147 two sink_4_1256(const A&); // { dg-error "" }
148 five sink_4_1256( A&&); // { dg-error "" }
149 six sink_4_1256(const A&&); // { dg-error "" }
156 const volatile A cva = a;
157 sink_4_1256(va); // { dg-error "no match" }
158 sink_4_1256(cva); // { dg-error "no match" }
159 sink_4_1256(v_source()); // { dg-error "no match" }
160 sink_4_1256(cv_source()); // { dg-error "no match" }
164 one sink_4_1257( A&); // { dg-error "" }
165 two sink_4_1257(const A&); // { dg-error "" }
166 five sink_4_1257( A&&); // { dg-error "" }
167 seven sink_4_1257(volatile A&&); // { dg-error "" }
174 const volatile A cva = a;
175 sink_4_1257(cva); // { dg-error "no match" }
176 sink_4_1257(cv_source()); // { dg-error "no match" }
180 one sink_4_1267( A&); // { dg-error "" }
181 two sink_4_1267(const A&); // { dg-error "" }
182 six sink_4_1267(const A&&); // { dg-error "" }
183 seven sink_4_1267(volatile A&&); // { dg-error "" }
190 const volatile A cva = a;
191 sink_4_1267(cva); // { dg-error "no match" }
192 sink_4_1267(source()); // { dg-error "ambiguous" }
193 sink_4_1267(cv_source()); // { dg-error "no match" }
197 one sink_4_1345( A&); // { dg-error "" }
198 three sink_4_1345(volatile A&); // { dg-error "" }
199 four sink_4_1345(const volatile A&); // { dg-error "" }
200 five sink_4_1345( A&&); // { dg-error "" }
207 const volatile A cva = a;
208 sink_4_1345(c_source()); // { dg-error "no match" }
209 sink_4_1345(v_source()); // { dg-error "no match" }
210 sink_4_1345(cv_source()); // { dg-error "no match" }
214 one sink_4_1346( A&); // { dg-error "" }
215 three sink_4_1346(volatile A&); // { dg-error "" }
216 four sink_4_1346(const volatile A&); // { dg-error "" }
217 six sink_4_1346(const A&&); // { dg-error "" }
224 const volatile A cva = a;
225 sink_4_1346(v_source()); // { dg-error "no match" }
226 sink_4_1346(cv_source()); // { dg-error "no match" }
230 one sink_4_1347( A&); // { dg-error "" }
231 three sink_4_1347(volatile A&); // { dg-error "" }
232 four sink_4_1347(const volatile A&); // { dg-error "" }
233 seven sink_4_1347(volatile A&&); // { dg-error "" }
240 const volatile A cva = a;
241 sink_4_1347(c_source()); // { dg-error "no match" }
242 sink_4_1347(cv_source()); // { dg-error "no match" }
246 one sink_4_1356( A&); // { dg-error "" }
247 three sink_4_1356(volatile A&); // { dg-error "" }
248 five sink_4_1356( A&&); // { dg-error "" }
249 six sink_4_1356(const A&&); // { dg-error "" }
256 const volatile A cva = a;
257 sink_4_1356(cva); // { dg-error "no match" }
258 sink_4_1356(v_source()); // { dg-error "no match" }
259 sink_4_1356(cv_source()); // { dg-error "no match" }
263 one sink_4_1357( A&); // { dg-error "" }
264 three sink_4_1357(volatile A&); // { dg-error "" }
265 five sink_4_1357( A&&); // { dg-error "" }
266 seven sink_4_1357(volatile A&&); // { dg-error "" }
273 const volatile A cva = a;
274 sink_4_1357(ca); // { dg-error "no match" }
275 sink_4_1357(cva); // { dg-error "no match" }
276 sink_4_1357(c_source()); // { dg-error "no match" }
277 sink_4_1357(cv_source()); // { dg-error "no match" }
281 one sink_4_1367( A&); // { dg-error "" }
282 three sink_4_1367(volatile A&); // { dg-error "" }
283 six sink_4_1367(const A&&); // { dg-error "" }
284 seven sink_4_1367(volatile A&&); // { dg-error "" }
291 const volatile A cva = a;
292 sink_4_1367(cva); // { dg-error "no match" }
293 sink_4_1367(source()); // { dg-error "ambiguous" }
294 sink_4_1367(cv_source()); // { dg-error "no match" }
298 one sink_4_1456( A&); // { dg-error "" }
299 four sink_4_1456(const volatile A&); // { dg-error "" }
300 five sink_4_1456( A&&); // { dg-error "" }
301 six sink_4_1456(const A&&); // { dg-error "" }
308 const volatile A cva = a;
309 sink_4_1456(v_source()); // { dg-error "no match" }
310 sink_4_1456(cv_source()); // { dg-error "no match" }
314 one sink_4_1457( A&); // { dg-error "" }
315 four sink_4_1457(const volatile A&); // { dg-error "" }
316 five sink_4_1457( A&&); // { dg-error "" }
317 seven sink_4_1457(volatile A&&); // { dg-error "" }
324 const volatile A cva = a;
325 sink_4_1457(c_source()); // { dg-error "no match" }
326 sink_4_1457(cv_source()); // { dg-error "no match" }
330 one sink_4_1467( A&); // { dg-error "" }
331 four sink_4_1467(const volatile A&); // { dg-error "" }
332 six sink_4_1467(const A&&); // { dg-error "" }
333 seven sink_4_1467(volatile A&&); // { dg-error "" }
340 const volatile A cva = a;
341 sink_4_1467(source()); // { dg-error "ambiguous" }
342 sink_4_1467(cv_source()); // { dg-error "no match" }
346 one sink_4_1567( A&); // { dg-error "" }
347 five sink_4_1567( A&&); // { dg-error "" }
348 six sink_4_1567(const A&&); // { dg-error "" }
349 seven sink_4_1567(volatile A&&); // { dg-error "" }
356 const volatile A cva = a;
357 sink_4_1567(cva); // { dg-error "no match" }
358 sink_4_1567(cv_source()); // { dg-error "no match" }
362 one sink_4_1678( A&);
363 six sink_4_1678(const A&&); // { dg-error "" }
364 seven sink_4_1678(volatile A&&); // { dg-error "" }
365 eight sink_4_1678(const volatile A&&); // { dg-error "" }
372 const volatile A cva = a;
373 sink_4_1678(source()); // { dg-error "ambiguous" }
377 two sink_4_2345(const A&); // { dg-error "" }
378 three sink_4_2345(volatile A&); // { dg-error "" }
379 four sink_4_2345(const volatile A&); // { dg-error "" }
380 five sink_4_2345( A&&); // { dg-error "" }
387 const volatile A cva = a;
388 sink_4_2345(a); // { dg-error "ambiguous" }
389 sink_4_2345(v_source()); // { dg-error "no match" }
390 sink_4_2345(cv_source()); // { dg-error "no match" }
394 two sink_4_2346(const A&); // { dg-error "" }
395 three sink_4_2346(volatile A&); // { dg-error "" }
396 four sink_4_2346(const volatile A&); // { dg-error "" }
397 six sink_4_2346(const A&&); // { dg-error "" }
404 const volatile A cva = a;
405 sink_4_2346(a); // { dg-error "ambiguous" }
406 sink_4_2346(v_source()); // { dg-error "no match" }
407 sink_4_2346(cv_source()); // { dg-error "no match" }
411 two sink_4_2347(const A&); // { dg-error "" }
412 three sink_4_2347(volatile A&); // { dg-error "" }
413 four sink_4_2347(const volatile A&); // { dg-error "" }
414 seven sink_4_2347(volatile A&&); // { dg-error "" }
421 const volatile A cva = a;
422 sink_4_2347(a); // { dg-error "ambiguous" }
423 sink_4_2347(cv_source()); // { dg-error "no match" }
427 two sink_4_2348(const A&); // { dg-error "" }
428 three sink_4_2348(volatile A&); // { dg-error "" }
429 four sink_4_2348(const volatile A&); // { dg-error "" }
430 eight sink_4_2348(const volatile A&&); // { dg-error "" }
437 const volatile A cva = a;
438 sink_4_2348(a); // { dg-error "ambiguous" }
442 two sink_4_2356(const A&); // { dg-error "" }
443 three sink_4_2356(volatile A&); // { dg-error "" }
444 five sink_4_2356( A&&); // { dg-error "" }
445 six sink_4_2356(const A&&); // { dg-error "" }
452 const volatile A cva = a;
453 sink_4_2356(a); // { dg-error "ambiguous" }
454 sink_4_2356(cva); // { dg-error "no match" }
455 sink_4_2356(v_source()); // { dg-error "no match" }
456 sink_4_2356(cv_source()); // { dg-error "no match" }
460 two sink_4_2357(const A&); // { dg-error "" }
461 three sink_4_2357(volatile A&); // { dg-error "" }
462 five sink_4_2357( A&&); // { dg-error "" }
463 seven sink_4_2357(volatile A&&); // { dg-error "" }
470 const volatile A cva = a;
471 sink_4_2357(a); // { dg-error "ambiguous" }
472 sink_4_2357(cva); // { dg-error "no match" }
473 sink_4_2357(cv_source()); // { dg-error "no match" }
477 two sink_4_2358(const A&); // { dg-error "" }
478 three sink_4_2358(volatile A&); // { dg-error "" }
479 five sink_4_2358( A&&); // { dg-error "" }
480 eight sink_4_2358(const volatile A&&); // { dg-error "" }
487 const volatile A cva = a;
488 sink_4_2358(a); // { dg-error "ambiguous" }
492 two sink_4_2367(const A&); // { dg-error "" }
493 three sink_4_2367(volatile A&); // { dg-error "" }
494 six sink_4_2367(const A&&); // { dg-error "" }
495 seven sink_4_2367(volatile A&&); // { dg-error "" }
502 const volatile A cva = a;
503 sink_4_2367(a); // { dg-error "ambiguous" }
504 sink_4_2367(cva); // { dg-error "no match" }
505 sink_4_2367(source()); // { dg-error "ambiguous" }
506 sink_4_2367(cv_source()); // { dg-error "no match" }
510 two sink_4_2368(const A&); // { dg-error "" }
511 three sink_4_2368(volatile A&); // { dg-error "" }
512 six sink_4_2368(const A&&); // { dg-error "" }
513 eight sink_4_2368(const volatile A&&); // { dg-error "" }
520 const volatile A cva = a;
521 sink_4_2368(a); // { dg-error "ambiguous" }
525 two sink_4_2378(const A&); // { dg-error "" }
526 three sink_4_2378(volatile A&); // { dg-error "" }
527 seven sink_4_2378(volatile A&&); // { dg-error "" }
528 eight sink_4_2378(const volatile A&&); // { dg-error "" }
535 const volatile A cva = a;
536 sink_4_2378(a); // { dg-error "ambiguous" }
540 two sink_4_2456(const A&); // { dg-error "" }
541 four sink_4_2456(const volatile A&); // { dg-error "" }
542 five sink_4_2456( A&&); // { dg-error "" }
543 six sink_4_2456(const A&&); // { dg-error "" }
550 const volatile A cva = a;
551 sink_4_2456(v_source()); // { dg-error "no match" }
552 sink_4_2456(cv_source()); // { dg-error "no match" }
556 two sink_4_2457(const A&); // { dg-error "" }
557 four sink_4_2457(const volatile A&); // { dg-error "" }
558 five sink_4_2457( A&&); // { dg-error "" }
559 seven sink_4_2457(volatile A&&); // { dg-error "" }
566 const volatile A cva = a;
567 sink_4_2457(cv_source()); // { dg-error "no match" }
571 two sink_4_2467(const A&); // { dg-error "" }
572 four sink_4_2467(const volatile A&); // { dg-error "" }
573 six sink_4_2467(const A&&); // { dg-error "" }
574 seven sink_4_2467(volatile A&&); // { dg-error "" }
581 const volatile A cva = a;
582 sink_4_2467(source()); // { dg-error "ambiguous" }
583 sink_4_2467(cv_source()); // { dg-error "no match" }
587 two sink_4_2567(const A&); // { dg-error "" }
588 five sink_4_2567( A&&); // { dg-error "" }
589 six sink_4_2567(const A&&); // { dg-error "" }
590 seven sink_4_2567(volatile A&&); // { dg-error "" }
597 const volatile A cva = a;
598 sink_4_2567(cva); // { dg-error "no match" }
599 sink_4_2567(cv_source()); // { dg-error "no match" }
603 two sink_4_2678(const A&); // { dg-error "" }
604 six sink_4_2678(const A&&); // { dg-error "" }
605 seven sink_4_2678(volatile A&&); // { dg-error "" }
606 eight sink_4_2678(const volatile A&&); // { dg-error "" }
613 const volatile A cva = a;
614 sink_4_2678(source()); // { dg-error "ambiguous" }
618 three sink_4_3456(volatile A&); // { dg-error "" }
619 four sink_4_3456(const volatile A&); // { dg-error "" }
620 five sink_4_3456( A&&); // { dg-error "" }
621 six sink_4_3456(const A&&); // { dg-error "" }
628 const volatile A cva = a;
629 sink_4_3456(v_source()); // { dg-error "no match" }
630 sink_4_3456(cv_source()); // { dg-error "no match" }
634 three sink_4_3457(volatile A&); // { dg-error "" }
635 four sink_4_3457(const volatile A&); // { dg-error "" }
636 five sink_4_3457( A&&); // { dg-error "" }
637 seven sink_4_3457(volatile A&&); // { dg-error "" }
644 const volatile A cva = a;
645 sink_4_3457(c_source()); // { dg-error "no match" }
646 sink_4_3457(cv_source()); // { dg-error "no match" }
650 three sink_4_3467(volatile A&); // { dg-error "" }
651 four sink_4_3467(const volatile A&); // { dg-error "" }
652 six sink_4_3467(const A&&); // { dg-error "" }
653 seven sink_4_3467(volatile A&&); // { dg-error "" }
660 const volatile A cva = a;
661 sink_4_3467(source()); // { dg-error "ambiguous" }
662 sink_4_3467(cv_source()); // { dg-error "no match" }
666 three sink_4_3567(volatile A&); // { dg-error "" }
667 five sink_4_3567( A&&); // { dg-error "" }
668 six sink_4_3567(const A&&); // { dg-error "" }
669 seven sink_4_3567(volatile A&&); // { dg-error "" }
676 const volatile A cva = a;
677 sink_4_3567(cva); // { dg-error "no match" }
678 sink_4_3567(cv_source()); // { dg-error "no match" }
682 three sink_4_3678(volatile A&);
683 six sink_4_3678(const A&&); // { dg-error "" }
684 seven sink_4_3678(volatile A&&); // { dg-error "" }
685 eight sink_4_3678(const volatile A&&); // { dg-error "" }
692 const volatile A cva = a;
693 sink_4_3678(source()); // { dg-error "ambiguous" }
697 four sink_4_4567(const volatile A&); // { dg-error "" }
698 five sink_4_4567( A&&); // { dg-error "" }
699 six sink_4_4567(const A&&); // { dg-error "" }
700 seven sink_4_4567(volatile A&&); // { dg-error "" }
707 const volatile A cva = a;
708 sink_4_4567(cv_source()); // { dg-error "no match" }
712 four sink_4_4678(const volatile A&);
713 six sink_4_4678(const A&&); // { dg-error "" }
714 seven sink_4_4678(volatile A&&); // { dg-error "" }
715 eight sink_4_4678(const volatile A&&); // { dg-error "" }
722 const volatile A cva = a;
723 sink_4_4678(source()); // { dg-error "ambiguous" }
729 return test4_1235() + test4_1236() + test4_1237() + test4_1256() + test4_1257() +
730 test4_1267() + test4_1356() + test4_1357() + test4_1467() + test4_1567() +
731 test4_1678() + test4_2345() + test4_2346() + test4_2347() + test4_2348() +
732 test4_2356() + test4_2357() + test4_2358() + test4_2367() + test4_2368() +
733 test4_2378() + test4_2467() + test4_2567() + test4_2678() + test4_3467() +
734 test4_3567() + test4_3678() + test4_4678();