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_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" }
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" }
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" }
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" }
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" }
78 const volatile A cva = a;
79 sink_5_12347(cv_source()); // { dg-error "no match" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
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" }
164 const volatile A cva = a;
165 sink_5_12457(cv_source()); // { dg-error "no match" }
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" }
180 const volatile A cva = a;
181 sink_5_12467(source()); // { dg-error "ambiguous" }
182 sink_5_12467(cv_source()); // { dg-error "no match" }
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" }
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" }
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" }
214 const volatile A cva = a;
215 sink_5_12678(source()); // { dg-error "ambiguous" }
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" }
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" }
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" }
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" }
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" }
264 const volatile A cva = a;
265 sink_5_13467(source()); // { dg-error "ambiguous" }
266 sink_5_13467(cv_source()); // { dg-error "no match" }
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" }
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" }
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" }
298 const volatile A cva = a;
299 sink_5_13678(source()); // { dg-error "ambiguous" }
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" }
314 const volatile A cva = a;
315 sink_5_14567(cv_source()); // { dg-error "no match" }
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" }
330 const volatile A cva = a;
331 sink_5_14678(source()); // { dg-error "ambiguous" }
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" }
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" }
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" }
364 const volatile A cva = a;
365 sink_5_23457(a); // { dg-error "ambiguous" }
366 sink_5_23457(cv_source()); // { dg-error "no match" }
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" }
381 const volatile A cva = a;
382 sink_5_23458(a); // { dg-error "ambiguous" }
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" }
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" }
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" }
415 const volatile A cva = a;
416 sink_5_23468(a); // { dg-error "ambiguous" }
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" }
431 const volatile A cva = a;
432 sink_5_23478(a); // { dg-error "ambiguous" }
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" }
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" }
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" }
465 const volatile A cva = a;
466 sink_5_23568(a); // { dg-error "ambiguous" }
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" }
481 const volatile A cva = a;
482 sink_5_23578(a); // { dg-error "ambiguous" }
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" }
497 const volatile A cva = a;
498 sink_5_23678(a); // { dg-error "ambiguous" }
499 sink_5_23678(source()); // { dg-error "ambiguous" }
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" }
514 const volatile A cva = a;
515 sink_5_24567(cv_source()); // { dg-error "no match" }
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" }
530 const volatile A cva = a;
531 sink_5_24678(source()); // { dg-error "ambiguous" }
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" }
546 const volatile A cva = a;
547 sink_5_34567(cv_source()); // { dg-error "no match" }
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" }
562 const volatile A cva = a;
563 sink_5_34678(source()); // { dg-error "ambiguous" }
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();