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_6_123456( A&);
34 two sink_6_123456(const A&);
35 three sink_6_123456(volatile A&);
36 four sink_6_123456(const volatile A&);
37 five sink_6_123456( A&&);
38 six sink_6_123456(const A&&);
45 const volatile A cva = a;
46 sa<sizeof(sink_6_123456(a)) == 1> t1;
47 sa<sizeof(sink_6_123456(ca)) == 2> t2;
48 sa<sizeof(sink_6_123456(va)) == 3> t3;
49 sa<sizeof(sink_6_123456(cva)) == 4> t4;
50 sa<sizeof(sink_6_123456(source())) == 5> t5;
51 sa<sizeof(sink_6_123456(c_source())) == 6> t6;
55 one sink_6_123457( A&);
56 two sink_6_123457(const A&);
57 three sink_6_123457(volatile A&);
58 four sink_6_123457(const volatile A&);
59 five sink_6_123457( A&&);
60 seven sink_6_123457(volatile A&&);
67 const volatile A cva = a;
68 sa<sizeof(sink_6_123457(a)) == 1> t1;
69 sa<sizeof(sink_6_123457(ca)) == 2> t2;
70 sa<sizeof(sink_6_123457(va)) == 3> t3;
71 sa<sizeof(sink_6_123457(cva)) == 4> t4;
72 sa<sizeof(sink_6_123457(source())) == 5> t5;
73 sa<sizeof(sink_6_123457(c_source())) == 2> t6;
74 sa<sizeof(sink_6_123457(v_source())) == 7> t7;
78 one sink_6_123458( A&);
79 two sink_6_123458(const A&);
80 three sink_6_123458(volatile A&);
81 four sink_6_123458(const volatile A&);
82 five sink_6_123458( A&&);
83 eight sink_6_123458(const volatile A&&);
90 const volatile A cva = a;
91 sa<sizeof(sink_6_123458(a)) == 1> t1;
92 sa<sizeof(sink_6_123458(ca)) == 2> t2;
93 sa<sizeof(sink_6_123458(va)) == 3> t3;
94 sa<sizeof(sink_6_123458(cva)) == 4> t4;
95 sa<sizeof(sink_6_123458(source())) == 5> t5;
96 sa<sizeof(sink_6_123458(c_source())) == 8> t6;
97 sa<sizeof(sink_6_123458(v_source())) == 8> t7;
98 sa<sizeof(sink_6_123458(cv_source())) == 8> t8;
102 one sink_6_123467( A&);
103 two sink_6_123467(const A&);
104 three sink_6_123467(volatile A&);
105 four sink_6_123467(const volatile A&);
106 six sink_6_123467(const A&&);
107 seven sink_6_123467(volatile A&&);
114 const volatile A cva = a;
115 sa<sizeof(sink_6_123467(a)) == 1> t1;
116 sa<sizeof(sink_6_123467(ca)) == 2> t2;
117 sa<sizeof(sink_6_123467(va)) == 3> t3;
118 sa<sizeof(sink_6_123467(cva)) == 4> t4;
119 sa<sizeof(sink_6_123467(c_source())) == 6> t6;
120 sa<sizeof(sink_6_123467(v_source())) == 7> t7;
124 one sink_6_123468( A&);
125 two sink_6_123468(const A&);
126 three sink_6_123468(volatile A&);
127 four sink_6_123468(const volatile A&);
128 six sink_6_123468(const A&&);
129 eight sink_6_123468(const volatile A&&);
136 const volatile A cva = a;
137 sa<sizeof(sink_6_123468(a)) == 1> t1;
138 sa<sizeof(sink_6_123468(ca)) == 2> t2;
139 sa<sizeof(sink_6_123468(va)) == 3> t3;
140 sa<sizeof(sink_6_123468(cva)) == 4> t4;
141 sa<sizeof(sink_6_123468(source())) == 6> t5;
142 sa<sizeof(sink_6_123468(c_source())) == 6> t6;
143 sa<sizeof(sink_6_123468(v_source())) == 8> t7;
144 sa<sizeof(sink_6_123468(cv_source())) == 8> t8;
148 one sink_6_123478( A&);
149 two sink_6_123478(const A&);
150 three sink_6_123478(volatile A&);
151 four sink_6_123478(const volatile A&);
152 seven sink_6_123478(volatile A&&);
153 eight sink_6_123478(const volatile A&&);
160 const volatile A cva = a;
161 sa<sizeof(sink_6_123478(a)) == 1> t1;
162 sa<sizeof(sink_6_123478(ca)) == 2> t2;
163 sa<sizeof(sink_6_123478(va)) == 3> t3;
164 sa<sizeof(sink_6_123478(cva)) == 4> t4;
165 sa<sizeof(sink_6_123478(source())) == 7> t5;
166 sa<sizeof(sink_6_123478(c_source())) == 8> t6;
167 sa<sizeof(sink_6_123478(v_source())) == 7> t7;
168 sa<sizeof(sink_6_123478(cv_source())) == 8> t8;
172 one sink_6_123567( A&);
173 two sink_6_123567(const A&);
174 three sink_6_123567(volatile A&);
175 five sink_6_123567( A&&);
176 six sink_6_123567(const A&&);
177 seven sink_6_123567(volatile A&&);
184 const volatile A cva = a;
185 sa<sizeof(sink_6_123567(a)) == 1> t1;
186 sa<sizeof(sink_6_123567(ca)) == 2> t2;
187 sa<sizeof(sink_6_123567(va)) == 3> t3;
188 sa<sizeof(sink_6_123567(source())) == 5> t5;
189 sa<sizeof(sink_6_123567(c_source())) == 6> t6;
190 sa<sizeof(sink_6_123567(v_source())) == 7> t7;
194 one sink_6_123568( A&);
195 two sink_6_123568(const A&);
196 three sink_6_123568(volatile A&);
197 five sink_6_123568( A&&);
198 six sink_6_123568(const A&&);
199 eight sink_6_123568(const volatile A&&);
206 const volatile A cva = a;
207 sa<sizeof(sink_6_123568(a)) == 1> t1;
208 sa<sizeof(sink_6_123568(ca)) == 2> t2;
209 sa<sizeof(sink_6_123568(va)) == 3> t3;
210 sa<sizeof(sink_6_123568(cva)) == 8> t4;
211 sa<sizeof(sink_6_123568(source())) == 5> t5;
212 sa<sizeof(sink_6_123568(c_source())) == 6> t6;
213 sa<sizeof(sink_6_123568(v_source())) == 8> t7;
214 sa<sizeof(sink_6_123568(cv_source())) == 8> t8;
218 one sink_6_123578( A&);
219 two sink_6_123578(const A&);
220 three sink_6_123578(volatile A&);
221 five sink_6_123578( A&&);
222 seven sink_6_123578(volatile A&&);
223 eight sink_6_123578(const volatile A&&);
230 const volatile A cva = a;
231 sa<sizeof(sink_6_123578(a)) == 1> t1;
232 sa<sizeof(sink_6_123578(ca)) == 2> t2;
233 sa<sizeof(sink_6_123578(va)) == 3> t3;
234 sa<sizeof(sink_6_123578(cva)) == 8> t4;
235 sa<sizeof(sink_6_123578(source())) == 5> t5;
236 sa<sizeof(sink_6_123578(c_source())) == 8> t6;
237 sa<sizeof(sink_6_123578(v_source())) == 7> t7;
238 sa<sizeof(sink_6_123578(cv_source())) == 8> t8;
242 one sink_6_123678( A&);
243 two sink_6_123678(const A&);
244 three sink_6_123678(volatile A&);
245 six sink_6_123678(const A&&);
246 seven sink_6_123678(volatile A&&);
247 eight sink_6_123678(const volatile A&&);
254 const volatile A cva = a;
255 sa<sizeof(sink_6_123678(a)) == 1> t1;
256 sa<sizeof(sink_6_123678(ca)) == 2> t2;
257 sa<sizeof(sink_6_123678(va)) == 3> t3;
258 sa<sizeof(sink_6_123678(cva)) == 8> t4;
259 sa<sizeof(sink_6_123678(c_source())) == 6> t6;
260 sa<sizeof(sink_6_123678(v_source())) == 7> t7;
261 sa<sizeof(sink_6_123678(cv_source())) == 8> t8;
265 one sink_6_124567( A&);
266 two sink_6_124567(const A&);
267 four sink_6_124567(const volatile A&);
268 five sink_6_124567( A&&);
269 six sink_6_124567(const A&&);
270 seven sink_6_124567(volatile A&&);
277 const volatile A cva = a;
278 sa<sizeof(sink_6_124567(a)) == 1> t1;
279 sa<sizeof(sink_6_124567(ca)) == 2> t2;
280 sa<sizeof(sink_6_124567(va)) == 4> t3;
281 sa<sizeof(sink_6_124567(cva)) == 4> t4;
282 sa<sizeof(sink_6_124567(source())) == 5> t5;
283 sa<sizeof(sink_6_124567(c_source())) == 6> t6;
284 sa<sizeof(sink_6_124567(v_source())) == 7> t7;
288 one sink_6_124568( A&);
289 two sink_6_124568(const A&);
290 four sink_6_124568(const volatile A&);
291 five sink_6_124568( A&&);
292 six sink_6_124568(const A&&);
293 eight sink_6_124568(const volatile A&&);
300 const volatile A cva = a;
301 sa<sizeof(sink_6_124568(a)) == 1> t1;
302 sa<sizeof(sink_6_124568(ca)) == 2> t2;
303 sa<sizeof(sink_6_124568(va)) == 4> t3;
304 sa<sizeof(sink_6_124568(cva)) == 4> t4;
305 sa<sizeof(sink_6_124568(source())) == 5> t5;
306 sa<sizeof(sink_6_124568(c_source())) == 6> t6;
307 sa<sizeof(sink_6_124568(v_source())) == 8> t7;
308 sa<sizeof(sink_6_124568(cv_source())) == 8> t8;
312 one sink_6_124578( A&);
313 two sink_6_124578(const A&);
314 four sink_6_124578(const volatile A&);
315 five sink_6_124578( A&&);
316 seven sink_6_124578(volatile A&&);
317 eight sink_6_124578(const volatile A&&);
324 const volatile A cva = a;
325 sa<sizeof(sink_6_124578(a)) == 1> t1;
326 sa<sizeof(sink_6_124578(ca)) == 2> t2;
327 sa<sizeof(sink_6_124578(va)) == 4> t3;
328 sa<sizeof(sink_6_124578(cva)) == 4> t4;
329 sa<sizeof(sink_6_124578(source())) == 5> t5;
330 sa<sizeof(sink_6_124578(c_source())) == 8> t6;
331 sa<sizeof(sink_6_124578(v_source())) == 7> t7;
332 sa<sizeof(sink_6_124578(cv_source())) == 8> t8;
336 one sink_6_124678( A&);
337 two sink_6_124678(const A&);
338 four sink_6_124678(const volatile A&);
339 six sink_6_124678(const A&&);
340 seven sink_6_124678(volatile A&&);
341 eight sink_6_124678(const volatile A&&);
348 const volatile A cva = a;
349 sa<sizeof(sink_6_124678(a)) == 1> t1;
350 sa<sizeof(sink_6_124678(ca)) == 2> t2;
351 sa<sizeof(sink_6_124678(va)) == 4> t3;
352 sa<sizeof(sink_6_124678(cva)) == 4> t4;
353 sa<sizeof(sink_6_124678(c_source())) == 6> t6;
354 sa<sizeof(sink_6_124678(v_source())) == 7> t7;
355 sa<sizeof(sink_6_124678(cv_source())) == 8> t8;
359 one sink_6_125678( A&);
360 two sink_6_125678(const A&);
361 five sink_6_125678( A&&);
362 six sink_6_125678(const A&&);
363 seven sink_6_125678(volatile A&&);
364 eight sink_6_125678(const volatile A&&);
371 const volatile A cva = a;
372 sa<sizeof(sink_6_125678(a)) == 1> t1;
373 sa<sizeof(sink_6_125678(ca)) == 2> t2;
374 sa<sizeof(sink_6_125678(va)) == 7> t3;
375 sa<sizeof(sink_6_125678(cva)) == 8> t4;
376 sa<sizeof(sink_6_125678(source())) == 5> t5;
377 sa<sizeof(sink_6_125678(c_source())) == 6> t6;
378 sa<sizeof(sink_6_125678(v_source())) == 7> t7;
379 sa<sizeof(sink_6_125678(cv_source())) == 8> t8;
383 one sink_6_134567( A&);
384 three sink_6_134567(volatile A&);
385 four sink_6_134567(const volatile A&);
386 five sink_6_134567( A&&);
387 six sink_6_134567(const A&&);
388 seven sink_6_134567(volatile A&&);
395 const volatile A cva = a;
396 sa<sizeof(sink_6_134567(a)) == 1> t1;
397 sa<sizeof(sink_6_134567(ca)) == 4> t2;
398 sa<sizeof(sink_6_134567(va)) == 3> t3;
399 sa<sizeof(sink_6_134567(cva)) == 4> t4;
400 sa<sizeof(sink_6_134567(source())) == 5> t5;
401 sa<sizeof(sink_6_134567(c_source())) == 6> t6;
402 sa<sizeof(sink_6_134567(v_source())) == 7> t7;
406 one sink_6_134568( A&);
407 three sink_6_134568(volatile A&);
408 four sink_6_134568(const volatile A&);
409 five sink_6_134568( A&&);
410 six sink_6_134568(const A&&);
411 eight sink_6_134568(const volatile A&&);
418 const volatile A cva = a;
419 sa<sizeof(sink_6_134568(a)) == 1> t1;
420 sa<sizeof(sink_6_134568(ca)) == 4> t2;
421 sa<sizeof(sink_6_134568(va)) == 3> t3;
422 sa<sizeof(sink_6_134568(cva)) == 4> t4;
423 sa<sizeof(sink_6_134568(source())) == 5> t5;
424 sa<sizeof(sink_6_134568(c_source())) == 6> t6;
425 sa<sizeof(sink_6_134568(v_source())) == 8> t7;
426 sa<sizeof(sink_6_134568(cv_source())) == 8> t8;
430 one sink_6_134578( A&);
431 three sink_6_134578(volatile A&);
432 four sink_6_134578(const volatile A&);
433 five sink_6_134578( A&&);
434 seven sink_6_134578(volatile A&&);
435 eight sink_6_134578(const volatile A&&);
442 const volatile A cva = a;
443 sa<sizeof(sink_6_134578(a)) == 1> t1;
444 sa<sizeof(sink_6_134578(ca)) == 4> t2;
445 sa<sizeof(sink_6_134578(va)) == 3> t3;
446 sa<sizeof(sink_6_134578(cva)) == 4> t4;
447 sa<sizeof(sink_6_134578(source())) == 5> t5;
448 sa<sizeof(sink_6_134578(c_source())) == 8> t6;
449 sa<sizeof(sink_6_134578(v_source())) == 7> t7;
450 sa<sizeof(sink_6_134578(cv_source())) == 8> t8;
454 one sink_6_134678( A&);
455 three sink_6_134678(volatile A&);
456 four sink_6_134678(const volatile A&);
457 six sink_6_134678(const A&&);
458 seven sink_6_134678(volatile A&&);
459 eight sink_6_134678(const volatile A&&);
466 const volatile A cva = a;
467 sa<sizeof(sink_6_134678(a)) == 1> t1;
468 sa<sizeof(sink_6_134678(ca)) == 4> t2;
469 sa<sizeof(sink_6_134678(va)) == 3> t3;
470 sa<sizeof(sink_6_134678(cva)) == 4> t4;
471 sa<sizeof(sink_6_134678(c_source())) == 6> t6;
472 sa<sizeof(sink_6_134678(v_source())) == 7> t7;
473 sa<sizeof(sink_6_134678(cv_source())) == 8> t8;
477 one sink_6_135678( A&);
478 three sink_6_135678(volatile A&);
479 five sink_6_135678( A&&);
480 six sink_6_135678(const A&&);
481 seven sink_6_135678(volatile A&&);
482 eight sink_6_135678(const volatile A&&);
489 const volatile A cva = a;
490 sa<sizeof(sink_6_135678(a)) == 1> t1;
491 sa<sizeof(sink_6_135678(ca)) == 6> t2;
492 sa<sizeof(sink_6_135678(va)) == 3> t3;
493 sa<sizeof(sink_6_135678(cva)) == 8> t4;
494 sa<sizeof(sink_6_135678(source())) == 5> t5;
495 sa<sizeof(sink_6_135678(c_source())) == 6> t6;
496 sa<sizeof(sink_6_135678(v_source())) == 7> t7;
497 sa<sizeof(sink_6_135678(cv_source())) == 8> t8;
501 one sink_6_145678( A&);
502 four sink_6_145678(const volatile A&);
503 five sink_6_145678( A&&);
504 six sink_6_145678(const A&&);
505 seven sink_6_145678(volatile A&&);
506 eight sink_6_145678(const volatile A&&);
513 const volatile A cva = a;
514 sa<sizeof(sink_6_145678(a)) == 1> t1;
515 sa<sizeof(sink_6_145678(ca)) == 4> t2;
516 sa<sizeof(sink_6_145678(va)) == 4> t3;
517 sa<sizeof(sink_6_145678(cva)) == 4> t4;
518 sa<sizeof(sink_6_145678(source())) == 5> t5;
519 sa<sizeof(sink_6_145678(c_source())) == 6> t6;
520 sa<sizeof(sink_6_145678(v_source())) == 7> t7;
521 sa<sizeof(sink_6_145678(cv_source())) == 8> t8;
525 two sink_6_234567(const A&);
526 three sink_6_234567(volatile A&);
527 four sink_6_234567(const volatile A&);
528 five sink_6_234567( A&&);
529 six sink_6_234567(const A&&);
530 seven sink_6_234567(volatile A&&);
537 const volatile A cva = a;
538 sa<sizeof(sink_6_234567(ca)) == 2> t2;
539 sa<sizeof(sink_6_234567(va)) == 3> t3;
540 sa<sizeof(sink_6_234567(cva)) == 4> t4;
541 sa<sizeof(sink_6_234567(source())) == 5> t5;
542 sa<sizeof(sink_6_234567(c_source())) == 6> t6;
543 sa<sizeof(sink_6_234567(v_source())) == 7> t7;
547 two sink_6_234568(const A&);
548 three sink_6_234568(volatile A&);
549 four sink_6_234568(const volatile A&);
550 five sink_6_234568( A&&);
551 six sink_6_234568(const A&&);
552 eight sink_6_234568(const volatile A&&);
559 const volatile A cva = a;
560 sa<sizeof(sink_6_234568(ca)) == 2> t2;
561 sa<sizeof(sink_6_234568(va)) == 3> t3;
562 sa<sizeof(sink_6_234568(cva)) == 4> t4;
563 sa<sizeof(sink_6_234568(source())) == 5> t5;
564 sa<sizeof(sink_6_234568(c_source())) == 6> t6;
565 sa<sizeof(sink_6_234568(v_source())) == 8> t7;
566 sa<sizeof(sink_6_234568(cv_source())) == 8> t8;
570 two sink_6_234578(const A&);
571 three sink_6_234578(volatile A&);
572 four sink_6_234578(const volatile A&);
573 five sink_6_234578( A&&);
574 seven sink_6_234578(volatile A&&);
575 eight sink_6_234578(const volatile A&&);
582 const volatile A cva = a;
583 sa<sizeof(sink_6_234578(ca)) == 2> t2;
584 sa<sizeof(sink_6_234578(va)) == 3> t3;
585 sa<sizeof(sink_6_234578(cva)) == 4> t4;
586 sa<sizeof(sink_6_234578(source())) == 5> t5;
587 sa<sizeof(sink_6_234578(c_source())) == 8> t6;
588 sa<sizeof(sink_6_234578(v_source())) == 7> t7;
589 sa<sizeof(sink_6_234578(cv_source())) == 8> t8;
593 two sink_6_234678(const A&);
594 three sink_6_234678(volatile A&);
595 four sink_6_234678(const volatile A&);
596 six sink_6_234678(const A&&);
597 seven sink_6_234678(volatile A&&);
598 eight sink_6_234678(const volatile A&&);
605 const volatile A cva = a;
606 sa<sizeof(sink_6_234678(ca)) == 2> t2;
607 sa<sizeof(sink_6_234678(va)) == 3> t3;
608 sa<sizeof(sink_6_234678(cva)) == 4> t4;
609 sa<sizeof(sink_6_234678(c_source())) == 6> t6;
610 sa<sizeof(sink_6_234678(v_source())) == 7> t7;
611 sa<sizeof(sink_6_234678(cv_source())) == 8> t8;
615 two sink_6_235678(const A&);
616 three sink_6_235678(volatile A&);
617 five sink_6_235678( A&&);
618 six sink_6_235678(const A&&);
619 seven sink_6_235678(volatile A&&);
620 eight sink_6_235678(const volatile A&&);
627 const volatile A cva = a;
628 sa<sizeof(sink_6_235678(ca)) == 2> t2;
629 sa<sizeof(sink_6_235678(va)) == 3> t3;
630 sa<sizeof(sink_6_235678(cva)) == 8> t4;
631 sa<sizeof(sink_6_235678(source())) == 5> t5;
632 sa<sizeof(sink_6_235678(c_source())) == 6> t6;
633 sa<sizeof(sink_6_235678(v_source())) == 7> t7;
634 sa<sizeof(sink_6_235678(cv_source())) == 8> t8;
638 two sink_6_245678(const A&);
639 four sink_6_245678(const volatile A&);
640 five sink_6_245678( A&&);
641 six sink_6_245678(const A&&);
642 seven sink_6_245678(volatile A&&);
643 eight sink_6_245678(const volatile A&&);
650 const volatile A cva = a;
651 sa<sizeof(sink_6_245678(a)) == 2> t1;
652 sa<sizeof(sink_6_245678(ca)) == 2> t2;
653 sa<sizeof(sink_6_245678(va)) == 4> t3;
654 sa<sizeof(sink_6_245678(cva)) == 4> t4;
655 sa<sizeof(sink_6_245678(source())) == 5> t5;
656 sa<sizeof(sink_6_245678(c_source())) == 6> t6;
657 sa<sizeof(sink_6_245678(v_source())) == 7> t7;
658 sa<sizeof(sink_6_245678(cv_source())) == 8> t8;
662 three sink_6_345678(volatile A&);
663 four sink_6_345678(const volatile A&);
664 five sink_6_345678( A&&);
665 six sink_6_345678(const A&&);
666 seven sink_6_345678(volatile A&&);
667 eight sink_6_345678(const volatile A&&);
674 const volatile A cva = a;
675 sa<sizeof(sink_6_345678(a)) == 3> t1;
676 sa<sizeof(sink_6_345678(ca)) == 4> t2;
677 sa<sizeof(sink_6_345678(va)) == 3> t3;
678 sa<sizeof(sink_6_345678(cva)) == 4> t4;
679 sa<sizeof(sink_6_345678(source())) == 5> t5;
680 sa<sizeof(sink_6_345678(c_source())) == 6> t6;
681 sa<sizeof(sink_6_345678(v_source())) == 7> t7;
682 sa<sizeof(sink_6_345678(cv_source())) == 8> t8;
688 return test6_123456() + test6_123457() + test6_123458() + test6_123467() +
689 test6_123468() + test6_123478() + test6_123567() + test6_123568() +
690 test6_123578() + test6_123678() + test6_124567() + test6_124568() +
691 test6_124578() + test6_124678() + test6_125678() + test6_134567() +
692 test6_134568() + test6_134578() + test6_134678() + test6_135678() +
693 test6_145678() + test6_234567() + test6_234568() + test6_234578() +
694 test6_234678() + test6_235678() + test6_245678() + test6_345678();