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_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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
352 const volatile A cva = a;
353 sink_3_238(a); // { dg-error "ambiguous" }
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" }
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" }
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" }
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" }
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" }
396 const volatile A cva = a;
397 sink_3_247(cv_source()); // { dg-error "no match" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
583 const volatile A cva = a;
584 sink_3_467(source()); // { dg-error "ambiguous" }
585 sink_3_467(cv_source()); // { dg-error "no match" }
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" }
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" }
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" }
613 const volatile A cva = a;
614 sink_3_678(a); // { dg-error "ambiguous" }
615 sink_3_678(source()); // { dg-error "ambiguous" }
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();