1 // I, Howard Hinnant, hereby place this code in the public domain.
2 
3 // Test overload resolution among reference 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 // 5 at a time
32 
33 one   sink_5_12345(               A&);  // { dg-message "one sink_5_12345|no known conversion" }
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" }
38 
39 int test5_12345()
40 {
41                    A a;
42     const          A ca = a; // { dg-error "deleted" }
43           volatile A va;
44     const volatile A cva = a; // { dg-error "deleted" }
45     sink_5_12345(v_source());   // { dg-error "no match" }
46     // { dg-message "candidate" "candidate note" { target *-*-* } 45 }
47     sink_5_12345(cv_source());  // { dg-error "no match" }
48     // { dg-message "candidate" "candidate note" { target *-*-* } 47 }
49     return 0;
50 }
51 
52 one   sink_5_12346(               A&);  // { dg-message "one sink_5_12346|no known conversion" }
53 two   sink_5_12346(const          A&);  // { dg-message "note" }
54 three sink_5_12346(volatile       A&);  // { dg-message "note" }
55 four  sink_5_12346(const volatile A&);  // { dg-message "note" }
56 six   sink_5_12346(const          A&&);  // { dg-message "note" }
57 
58 int test5_12346()
59 {
60                    A a;
61     const          A ca = a; // { dg-error "deleted" }
62           volatile A va;
63     const volatile A cva = a; // { dg-error "deleted" }
64     sink_5_12346(v_source());   // { dg-error "no match" }
65     // { dg-message "candidate" "candidate note" { target *-*-* } 64 }
66     sink_5_12346(cv_source());  // { dg-error "no match" }
67     // { dg-message "candidate" "candidate note" { target *-*-* } 66 }
68     return 0;
69 }
70 
71 one   sink_5_12347(               A&);  // { dg-message "one sink_5_12347|no known conversion" }
72 two   sink_5_12347(const          A&);  // { dg-message "note" }
73 three sink_5_12347(volatile       A&);  // { dg-message "note" }
74 four  sink_5_12347(const volatile A&);  // { dg-message "note" }
75 seven sink_5_12347(volatile       A&&);  // { dg-message "note" }
76 
77 int test5_12347()
78 {
79                    A a;
80     const          A ca = a; // { dg-error "deleted" }
81           volatile A va;
82     const volatile A cva = a; // { dg-error "deleted" }
83     sink_5_12347(cv_source());  // { dg-error "no match" }
84     // { dg-message "candidate" "candidate note" { target *-*-* } 83 }
85     return 0;
86 }
87 
88 one   sink_5_12356(               A&);  // { dg-message "one sink_5_12356|no known conversion" }
89 two   sink_5_12356(const          A&);  // { dg-message "note" }
90 three sink_5_12356(volatile       A&);  // { dg-message "note" }
91 five  sink_5_12356(               A&&);  // { dg-message "note" }
92 six   sink_5_12356(const          A&&);  // { dg-message "note" }
93 
94 int test5_12356()
95 {
96                    A a;
97     const          A ca = a; // { dg-error "deleted" }
98           volatile A va;
99     const volatile A cva = a; // { dg-error "deleted" }
100     sink_5_12356(cva);          // { dg-error "no match" }
101     // { dg-message "candidate" "candidate note" { target *-*-* } 100 }
102     sink_5_12356(v_source());   // { dg-error "no match" }
103     // { dg-message "candidate" "candidate note" { target *-*-* } 102 }
104     sink_5_12356(cv_source());  // { dg-error "no match" }
105     // { dg-message "candidate" "candidate note" { target *-*-* } 104 }
106     return 0;
107 }
108 
109 one   sink_5_12357(               A&);  // { dg-message "one sink_5_12357|no known conversion" }
110 two   sink_5_12357(const          A&);  // { dg-message "note" }
111 three sink_5_12357(volatile       A&);  // { dg-message "note" }
112 five  sink_5_12357(               A&&);  // { dg-message "note" }
113 seven sink_5_12357(volatile       A&&);  // { dg-message "note" }
114 
115 int test5_12357()
116 {
117                    A a;
118     const          A ca = a; // { dg-error "deleted" }
119           volatile A va;
120     const volatile A cva = a; // { dg-error "deleted" }
121     sink_5_12357(cva);          // { dg-error "no match" }
122     // { dg-message "candidate" "candidate note" { target *-*-* } 121 }
123     sink_5_12357(cv_source());  // { dg-error "no match" }
124     // { dg-message "candidate" "candidate note" { target *-*-* } 123 }
125     return 0;
126 }
127 
128 one   sink_5_12358(               A&);
129 two   sink_5_12358(const          A&);
130 three sink_5_12358(volatile       A&);
131 five  sink_5_12358(               A&&);
132 eight sink_5_12358(const volatile A&&); // { dg-message "" }
133 
134 int test5_12358()
135 {
136                    A a;
137     const          A ca = a; // { dg-error "deleted" }
138           volatile A va;
139     const volatile A cva = a; // { dg-error "deleted" }
140     sink_5_12358(cva);		// { dg-error "lvalue" }
141     return 0;
142 }
143 
144 one   sink_5_12367(               A&);  // { dg-message "one sink_5_12367|no known conversion" }
145 two   sink_5_12367(const          A&);  // { dg-message "note" }
146 three sink_5_12367(volatile       A&);  // { dg-message "note" }
147 six   sink_5_12367(const          A&&);  // { dg-message "note" }
148 seven sink_5_12367(volatile       A&&);  // { dg-message "note" }
149 
150 int test5_12367()
151 {
152                    A a;
153     const          A ca = a; // { dg-error "deleted" }
154           volatile A va;
155     const volatile A cva = a; // { dg-error "deleted" }
156     sink_5_12367(cva);          // { dg-error "no match" }
157     // { dg-message "candidate" "candidate note" { target *-*-* } 156 }
158     sink_5_12367(source());     // { dg-error "ambiguous" }
159     // { dg-message "candidate" "candidate note" { target *-*-* } 158 }
160     sink_5_12367(cv_source());  // { dg-error "no match" }
161     // { dg-message "candidate" "candidate note" { target *-*-* } 160 }
162     return 0;
163 }
164 
165 one   sink_5_12368(               A&);
166 two   sink_5_12368(const          A&);
167 three sink_5_12368(volatile       A&);
168 six   sink_5_12368(const          A&&);
169 eight sink_5_12368(const volatile A&&); // { dg-message "" }
170 
171 int test5_12368()
172 {
173                    A a;
174     const          A ca = a; // { dg-error "deleted" }
175           volatile A va;
176     const volatile A cva = a; // { dg-error "deleted" }
177     sink_5_12368(cva);		// { dg-error "lvalue" }
178     return 0;
179 }
180 
181 one   sink_5_12378(               A&);
182 two   sink_5_12378(const          A&);
183 three sink_5_12378(volatile       A&);
184 seven sink_5_12378(volatile       A&&);
185 eight sink_5_12378(const volatile A&&); // { dg-message "" }
186 
187 int test5_12378()
188 {
189                    A a;
190     const          A ca = a; // { dg-error "deleted" }
191           volatile A va;
192     const volatile A cva = a; // { dg-error "deleted" }
193     sink_5_12378(cva);		// { dg-error "lvalue" }
194     return 0;
195 }
196 
197 one   sink_5_12456(               A&);  // { dg-message "one sink_5_12456|no known conversion" }
198 two   sink_5_12456(const          A&);  // { dg-message "note" }
199 four  sink_5_12456(const volatile A&);  // { dg-message "note" }
200 five  sink_5_12456(               A&&);  // { dg-message "note" }
201 six   sink_5_12456(const          A&&);  // { dg-message "note" }
202 
203 int test5_12456()
204 {
205                    A a;
206     const          A ca = a; // { dg-error "deleted" }
207           volatile A va;
208     const volatile A cva = a; // { dg-error "deleted" }
209     sink_5_12456(v_source());   // { dg-error "no match" }
210     // { dg-message "candidate" "candidate note" { target *-*-* } 209 }
211     sink_5_12456(cv_source());  // { dg-error "no match" }
212     // { dg-message "candidate" "candidate note" { target *-*-* } 211 }
213     return 0;
214 }
215 
216 one   sink_5_12457(               A&);  // { dg-message "one sink_5_12457|no known conversion" }
217 two   sink_5_12457(const          A&);  // { dg-message "note" }
218 four  sink_5_12457(const volatile A&);  // { dg-message "note" }
219 five  sink_5_12457(               A&&);  // { dg-message "note" }
220 seven sink_5_12457(volatile       A&&);  // { dg-message "note" }
221 
222 int test5_12457()
223 {
224                    A a;
225     const          A ca = a; // { dg-error "deleted" }
226           volatile A va;
227     const volatile A cva = a; // { dg-error "deleted" }
228     sink_5_12457(cv_source());  // { dg-error "no match" }
229     // { dg-message "candidate" "candidate note" { target *-*-* } 228 }
230     return 0;
231 }
232 
233 one   sink_5_12467(               A&);  // { dg-message "one sink_5_12467|no known conversion" }
234 two   sink_5_12467(const          A&);  // { dg-message "note" }
235 four  sink_5_12467(const volatile A&);  // { dg-message "note" }
236 six   sink_5_12467(const          A&&);  // { dg-message "note" }
237 seven sink_5_12467(volatile       A&&);  // { dg-message "note" }
238 
239 int test5_12467()
240 {
241                    A a;
242     const          A ca = a; // { dg-error "deleted" }
243           volatile A va;
244     const volatile A cva = a; // { dg-error "deleted" }
245     sink_5_12467(source());     // { dg-error "ambiguous" }
246     // { dg-message "candidate" "candidate note" { target *-*-* } 245 }
247     sink_5_12467(cv_source());  // { dg-error "no match" }
248     // { dg-message "candidate" "candidate note" { target *-*-* } 247 }
249     return 0;
250 }
251 
252 one   sink_5_12567(               A&);  // { dg-message "one sink_5_12567|no known conversion" }
253 two   sink_5_12567(const          A&);  // { dg-message "note" }
254 five  sink_5_12567(               A&&);  // { dg-message "note" }
255 six   sink_5_12567(const          A&&);  // { dg-message "note" }
256 seven sink_5_12567(volatile       A&&);  // { dg-message "" }
257 
258 int test5_12567()
259 {
260                    A a;
261     const          A ca = a; // { dg-error "deleted" }
262           volatile A va;
263     const volatile A cva = a; // { dg-error "deleted" }
264     sink_5_12567(va);		// { dg-error "lvalue" }
265     sink_5_12567(cva);          // { dg-error "no match" }
266     // { dg-message "candidate" "candidate note" { target *-*-* } 265 }
267     sink_5_12567(cv_source());  // { dg-error "no match" }
268     // { dg-message "candidate" "candidate note" { target *-*-* } 267 }
269     return 0;
270 }
271 
272 one   sink_5_12568(               A&);
273 two   sink_5_12568(const          A&);
274 five  sink_5_12568(               A&&);
275 six   sink_5_12568(const          A&&);
276 eight sink_5_12568(const volatile A&&); // { dg-message "" }
277 
278 int test5_12568()
279 {
280                    A a;
281     const          A ca = a; // { dg-error "deleted" }
282           volatile A va;
283     const volatile A cva = a; // { dg-error "deleted" }
284     sink_5_12568(va);		// { dg-error "lvalue" }
285     sink_5_12568(cva);		// { dg-error "lvalue" }
286     return 0;
287 }
288 
289 one   sink_5_12578(               A&);
290 two   sink_5_12578(const          A&);
291 five  sink_5_12578(               A&&);
292 seven sink_5_12578(volatile       A&&); // { dg-message "" }
293 eight sink_5_12578(const volatile A&&); // { dg-message "" }
294 
295 int test5_12578()
296 {
297                    A a;
298     const          A ca = a; // { dg-error "deleted" }
299           volatile A va;
300     const volatile A cva = a; // { dg-error "deleted" }
301     sink_5_12578(va);		// { dg-error "lvalue" }
302     sink_5_12578(cva);		// { dg-error "lvalue" }
303     return 0;
304 }
305 
306 one   sink_5_12678(               A&);
307 two   sink_5_12678(const          A&);  // { dg-message "note" }
308 six   sink_5_12678(const          A&&);  // { dg-message "note" }
309 seven sink_5_12678(volatile       A&&);  // { dg-message "" }
310 eight sink_5_12678(const volatile A&&);  // { dg-message "" }
311 
312 int test5_12678()
313 {
314                    A a;
315     const          A ca = a; // { dg-error "deleted" }
316           volatile A va;
317     const volatile A cva = a; // { dg-error "deleted" }
318     sink_5_12678(va);		// { dg-error "lvalue" }
319     sink_5_12678(cva);		// { dg-error "lvalue" }
320     sink_5_12678(source());  // { dg-error "ambiguous" }
321     // { dg-message "candidate" "candidate note" { target *-*-* } 320 }
322     return 0;
323 }
324 
325 one   sink_5_13456(               A&);  // { dg-message "one sink_5_13456|no known conversion" }
326 three sink_5_13456(volatile       A&);  // { dg-message "note" }
327 four  sink_5_13456(const volatile A&);  // { dg-message "note" }
328 five  sink_5_13456(               A&&);  // { dg-message "note" }
329 six   sink_5_13456(const          A&&);  // { dg-message "note" }
330 
331 int test5_13456()
332 {
333                    A a;
334     const          A ca = a; // { dg-error "deleted" }
335           volatile A va;
336     const volatile A cva = a; // { dg-error "deleted" }
337     sink_5_13456(v_source());   // { dg-error "no match" }
338     // { dg-message "candidate" "candidate note" { target *-*-* } 337 }
339     sink_5_13456(cv_source());  // { dg-error "no match" }
340     // { dg-message "candidate" "candidate note" { target *-*-* } 339 }
341     return 0;
342 }
343 
344 one   sink_5_13457(               A&);  // { dg-message "one sink_5_13457|no known conversion" }
345 three sink_5_13457(volatile       A&);  // { dg-message "note" }
346 four  sink_5_13457(const volatile A&);  // { dg-message "note" }
347 five  sink_5_13457(               A&&);  // { dg-message "note" }
348 seven sink_5_13457(volatile       A&&);  // { dg-message "note" }
349 
350 int test5_13457()
351 {
352                    A a;
353     const          A ca = a; // { dg-error "deleted" }
354           volatile A va;
355     const volatile A cva = a; // { dg-error "deleted" }
356     sink_5_13457(c_source());   // { dg-error "no match" }
357     // { dg-message "candidate" "candidate note" { target *-*-* } 356 }
358     sink_5_13457(cv_source());  // { dg-error "no match" }
359     // { dg-message "candidate" "candidate note" { target *-*-* } 358 }
360     return 0;
361 }
362 
363 one   sink_5_13467(               A&);  // { dg-message "one sink_5_13467|no known conversion" }
364 three sink_5_13467(volatile       A&);  // { dg-message "note" }
365 four  sink_5_13467(const volatile A&);  // { dg-message "note" }
366 six   sink_5_13467(const          A&&);  // { dg-message "note" }
367 seven sink_5_13467(volatile       A&&);  // { dg-message "note" }
368 
369 int test5_13467()
370 {
371                    A a;
372     const          A ca = a; // { dg-error "deleted" }
373           volatile A va;
374     const volatile A cva = a; // { dg-error "deleted" }
375     sink_5_13467(source());     // { dg-error "ambiguous" }
376     // { dg-message "candidate" "candidate note" { target *-*-* } 375 }
377     sink_5_13467(cv_source());  // { dg-error "no match" }
378     // { dg-message "candidate" "candidate note" { target *-*-* } 377 }
379     return 0;
380 }
381 
382 one   sink_5_13567(               A&);  // { dg-message "one sink_5_13567|no known conversion" }
383 three sink_5_13567(volatile       A&);  // { dg-message "note" }
384 five  sink_5_13567(               A&&);  // { dg-message "note" }
385 six   sink_5_13567(const          A&&);  // { dg-message "" }
386 seven sink_5_13567(volatile       A&&);  // { dg-message "note" }
387 
388 int test5_13567()
389 {
390                    A a;
391     const          A ca = a; // { dg-error "deleted" }
392           volatile A va;
393     const volatile A cva = a; // { dg-error "deleted" }
394     sink_5_13567(ca);		// { dg-error "lvalue" }
395     sink_5_13567(cva);          // { dg-error "no match" }
396     // { dg-message "candidate" "candidate note" { target *-*-* } 395 }
397     sink_5_13567(cv_source());  // { dg-error "no match" }
398     // { dg-message "candidate" "candidate note" { target *-*-* } 397 }
399     return 0;
400 }
401 
402 one   sink_5_13568(               A&);
403 three sink_5_13568(volatile       A&);
404 five  sink_5_13568(               A&&);
405 six   sink_5_13568(const          A&&); // { dg-message "" }
406 eight sink_5_13568(const volatile A&&); // { dg-message "" }
407 
408 int test5_13568()
409 {
410                    A a;
411     const          A ca = a; // { dg-error "deleted" }
412           volatile A va;
413     const volatile A cva = a; // { dg-error "deleted" }
414     sink_5_13568(ca);		// { dg-error "lvalue" }
415     sink_5_13568(cva);		// { dg-error "lvalue" }
416     return 0;
417 }
418 
419 one   sink_5_13578(               A&);
420 three sink_5_13578(volatile       A&);
421 five  sink_5_13578(               A&&);
422 seven sink_5_13578(volatile       A&&);
423 eight sink_5_13578(const volatile A&&); // { dg-message "" }
424 
425 int test5_13578()
426 {
427                    A a;
428     const          A ca = a; // { dg-error "deleted" }
429           volatile A va;
430     const volatile A cva = a; // { dg-error "deleted" }
431     sink_5_13578(ca);		// { dg-error "lvalue" }
432     sink_5_13578(cva);		// { dg-error "lvalue" }
433     return 0;
434 }
435 
436 one   sink_5_13678(               A&);
437 three sink_5_13678(volatile       A&);
438 six   sink_5_13678(const          A&&);  // { dg-message "" }
439 seven sink_5_13678(volatile       A&&);  // { dg-message "note" }
440 eight sink_5_13678(const volatile A&&);  // { dg-message "" }
441 
442 int test5_13678()
443 {
444                    A a;
445     const          A ca = a; // { dg-error "deleted" }
446           volatile A va;
447     const volatile A cva = a; // { dg-error "deleted" }
448     sink_5_13678(ca);		// { dg-error "lvalue" }
449     sink_5_13678(cva);		// { dg-error "lvalue" }
450     sink_5_13678(source());  // { dg-error "ambiguous" }
451     // { dg-message "candidate" "candidate note" { target *-*-* } 450 }
452     return 0;
453 }
454 
455 one   sink_5_14567(               A&);  // { dg-message "one sink_5_14567|no known conversion" }
456 four  sink_5_14567(const volatile A&);  // { dg-message "note" }
457 five  sink_5_14567(               A&&);  // { dg-message "note" }
458 six   sink_5_14567(const          A&&);  // { dg-message "note" }
459 seven sink_5_14567(volatile       A&&);  // { dg-message "note" }
460 
461 int test5_14567()
462 {
463                    A a;
464     const          A ca = a; // { dg-error "deleted" }
465           volatile A va;
466     const volatile A cva = a; // { dg-error "deleted" }
467     sink_5_14567(cv_source());  // { dg-error "no match" }
468     // { dg-message "candidate" "candidate note" { target *-*-* } 467 }
469     return 0;
470 }
471 
472 one   sink_5_14678(               A&);
473 four  sink_5_14678(const volatile A&);
474 six   sink_5_14678(const          A&&);  // { dg-message "note" }
475 seven sink_5_14678(volatile       A&&);  // { dg-message "note" }
476 eight sink_5_14678(const volatile A&&);  // { dg-message "note" }
477 
478 int test5_14678()
479 {
480                    A a;
481     const          A ca = a; // { dg-error "deleted" }
482           volatile A va;
483     const volatile A cva = a; // { dg-error "deleted" }
484     sink_5_14678(source());  // { dg-error "ambiguous" }
485     // { dg-message "candidate" "candidate note" { target *-*-* } 484 }
486     return 0;
487 }
488 
489 one   sink_5_15678(               A&);
490 five  sink_5_15678(               A&&);
491 six   sink_5_15678(const          A&&); // { dg-message "" }
492 seven sink_5_15678(volatile       A&&); // { dg-message "" }
493 eight sink_5_15678(const volatile A&&); // { dg-message "" }
494 
495 int test5_15678()
496 {
497                    A a;
498     const          A ca = a; // { dg-error "deleted" }
499           volatile A va;
500     const volatile A cva = a; // { dg-error "deleted" }
501     sink_5_15678(ca);		// { dg-error "lvalue" }
502     sink_5_15678(va);		// { dg-error "lvalue" }
503     sink_5_15678(cva);		// { dg-error "lvalue" }
504     return 0;
505 }
506 
507 two   sink_5_23456(const          A&);  // { dg-message "two sink_5_23456|no known conversion" }
508 three sink_5_23456(volatile       A&);  // { dg-message "note" }
509 four  sink_5_23456(const volatile A&);  // { dg-message "note" }
510 five  sink_5_23456(               A&&);  // { dg-message "note" }
511 six   sink_5_23456(const          A&&);  // { dg-message "note" }
512 
513 int test5_23456()
514 {
515                    A a;
516     const          A ca = a; // { dg-error "deleted" }
517           volatile A va;
518     const volatile A cva = a; // { dg-error "deleted" }
519     sink_5_23456(a);            // { dg-error "ambiguous" }
520     // { dg-message "candidate" "candidate note" { target *-*-* } 519 }
521     sink_5_23456(v_source());   // { dg-error "no match" }
522     // { dg-message "candidate" "candidate note" { target *-*-* } 521 }
523     sink_5_23456(cv_source());  // { dg-error "no match" }
524     // { dg-message "candidate" "candidate note" { target *-*-* } 523 }
525     return 0;
526 }
527 
528 two   sink_5_23457(const          A&);  // { dg-message "two sink_5_23457|no known conversion" }
529 three sink_5_23457(volatile       A&);  // { dg-message "note" }
530 four  sink_5_23457(const volatile A&);  // { dg-message "note" }
531 five  sink_5_23457(               A&&);  // { dg-message "note" }
532 seven sink_5_23457(volatile       A&&);  // { dg-message "note" }
533 
534 int test5_23457()
535 {
536                    A a;
537     const          A ca = a; // { dg-error "deleted" }
538           volatile A va;
539     const volatile A cva = a; // { dg-error "deleted" }
540     sink_5_23457(a);            // { dg-error "ambiguous" }
541     // { dg-message "candidate" "candidate note" { target *-*-* } 540 }
542     sink_5_23457(cv_source());  // { dg-error "no match" }
543     // { dg-message "candidate" "candidate note" { target *-*-* } 542 }
544     return 0;
545 }
546 
547 two   sink_5_23458(const          A&);  // { dg-message "note" }
548 three sink_5_23458(volatile       A&);  // { dg-message "note" }
549 four  sink_5_23458(const volatile A&);  // { dg-message "note" }
550 five  sink_5_23458(               A&&);  // { dg-message "note" }
551 eight sink_5_23458(const volatile A&&);  // { dg-message "note" }
552 
553 int test5_23458()
554 {
555                    A a;
556     const          A ca = a; // { dg-error "deleted" }
557           volatile A va;
558     const volatile A cva = a; // { dg-error "deleted" }
559     sink_5_23458(a);  // { dg-error "ambiguous" }
560     // { dg-message "candidate" "candidate note" { target *-*-* } 559 }
561     return 0;
562 }
563 
564 two   sink_5_23467(const          A&);  // { dg-message "two sink_5_23467|no known conversion" }
565 three sink_5_23467(volatile       A&);  // { dg-message "note" }
566 four  sink_5_23467(const volatile A&);  // { dg-message "note" }
567 six   sink_5_23467(const          A&&);  // { dg-message "note" }
568 seven sink_5_23467(volatile       A&&);  // { dg-message "note" }
569 
570 int test5_23467()
571 {
572                    A a;
573     const          A ca = a; // { dg-error "deleted" }
574           volatile A va;
575     const volatile A cva = a; // { dg-error "deleted" }
576     sink_5_23467(a);            // { dg-error "ambiguous" }
577     // { dg-message "candidate" "candidate note" { target *-*-* } 576 }
578     sink_5_23467(source());     // { dg-error "ambiguous" }
579     // { dg-message "candidate" "candidate note" { target *-*-* } 578 }
580     sink_5_23467(cv_source());  // { dg-error "no match" }
581     // { dg-message "candidate" "candidate note" { target *-*-* } 580 }
582     return 0;
583 }
584 
585 two   sink_5_23468(const          A&);  // { dg-message "note" }
586 three sink_5_23468(volatile       A&);  // { dg-message "note" }
587 four  sink_5_23468(const volatile A&);  // { dg-message "note" }
588 six   sink_5_23468(const          A&&);  // { dg-message "note" }
589 eight sink_5_23468(const volatile A&&);  // { dg-message "note" }
590 
591 int test5_23468()
592 {
593                    A a;
594     const          A ca = a; // { dg-error "deleted" }
595           volatile A va;
596     const volatile A cva = a; // { dg-error "deleted" }
597     sink_5_23468(a);  // { dg-error "ambiguous" }
598     // { dg-message "candidate" "candidate note" { target *-*-* } 597 }
599    return 0;
600 }
601 
602 two   sink_5_23478(const          A&);  // { dg-message "note" }
603 three sink_5_23478(volatile       A&);  // { dg-message "note" }
604 four  sink_5_23478(const volatile A&);  // { dg-message "note" }
605 seven sink_5_23478(volatile       A&&);  // { dg-message "note" }
606 eight sink_5_23478(const volatile A&&);  // { dg-message "note" }
607 
608 int test5_23478()
609 {
610                    A a;
611     const          A ca = a; // { dg-error "deleted" }
612           volatile A va;
613     const volatile A cva = a; // { dg-error "deleted" }
614     sink_5_23478(a);  // { dg-error "ambiguous" }
615     // { dg-message "candidate" "candidate note" { target *-*-* } 614 }
616     return 0;
617 }
618 
619 two   sink_5_23567(const          A&);  // { dg-message "two sink_5_23567|no known conversion" }
620 three sink_5_23567(volatile       A&);  // { dg-message "note" }
621 five  sink_5_23567(               A&&);  // { dg-message "note" }
622 six   sink_5_23567(const          A&&);  // { dg-message "note" }
623 seven sink_5_23567(volatile       A&&);  // { dg-message "note" }
624 
625 int test5_23567()
626 {
627                    A a;
628     const          A ca = a; // { dg-error "deleted" }
629           volatile A va;
630     const volatile A cva = a; // { dg-error "deleted" }
631     sink_5_23567(a);            // { dg-error "ambiguous" }
632     // { dg-message "candidate" "candidate note" { target *-*-* } 631 }
633     sink_5_23567(cva);          // { dg-error "no match" }
634     // { dg-message "candidate" "candidate note" { target *-*-* } 633 }
635     sink_5_23567(cv_source());  // { dg-error "no match" }
636     // { dg-message "candidate" "candidate note" { target *-*-* } 635 }
637     return 0;
638 }
639 
640 two   sink_5_23568(const          A&);  // { dg-message "note" }
641 three sink_5_23568(volatile       A&);  // { dg-message "note" }
642 five  sink_5_23568(               A&&);  // { dg-message "note" }
643 six   sink_5_23568(const          A&&);  // { dg-message "note" }
644 eight sink_5_23568(const volatile A&&);  // { dg-message "" }
645 
646 int test5_23568()
647 {
648                    A a;
649     const          A ca = a; // { dg-error "deleted" }
650           volatile A va;
651     const volatile A cva = a; // { dg-error "deleted" }
652     sink_5_23568(cva); // { dg-error "lvalue" }
653     sink_5_23568(a);  // { dg-error "ambiguous" }
654     // { dg-message "candidate" "candidate note" { target *-*-* } 653 }
655     return 0;
656 }
657 
658 two   sink_5_23578(const          A&);  // { dg-message "note" }
659 three sink_5_23578(volatile       A&);  // { dg-message "note" }
660 five  sink_5_23578(               A&&);  // { dg-message "note" }
661 seven sink_5_23578(volatile       A&&);  // { dg-message "note" }
662 eight sink_5_23578(const volatile A&&);  // { dg-message "" }
663 
664 int test5_23578()
665 {
666                    A a;
667     const          A ca = a; // { dg-error "deleted" }
668           volatile A va;
669     const volatile A cva = a; // { dg-error "deleted" }
670     sink_5_23578(cva); // { dg-error "lvalue" }
671     sink_5_23578(a);  // { dg-error "ambiguous" }
672     // { dg-message "candidate" "candidate note" { target *-*-* } 671 }
673     return 0;
674 }
675 
676 two   sink_5_23678(const          A&);  // { dg-message "note" }
677 three sink_5_23678(volatile       A&);  // { dg-message "note" }
678 six   sink_5_23678(const          A&&);  // { dg-message "note" }
679 seven sink_5_23678(volatile       A&&);  // { dg-message "note" }
680 eight sink_5_23678(const volatile A&&);  // { dg-message "" }
681 
682 int test5_23678()
683 {
684                    A a;
685     const          A ca = a; // { dg-error "deleted" }
686           volatile A va;
687     const volatile A cva = a; // { dg-error "deleted" }
688     sink_5_23678(a);         // { dg-error "ambiguous" }
689     // { dg-message "candidate" "candidate note" { target *-*-* } 688 }
690     sink_5_23678(cva);	     // { dg-error "lvalue" }
691     sink_5_23678(source());  // { dg-error "ambiguous" }
692     // { dg-message "candidate" "candidate note" { target *-*-* } 691 }
693     return 0;
694 }
695 
696 two   sink_5_24567(const          A&);  // { dg-message "two sink_5_24567|no known conversion" }
697 four  sink_5_24567(const volatile A&);  // { dg-message "note" }
698 five  sink_5_24567(               A&&);  // { dg-message "note" }
699 six   sink_5_24567(const          A&&);  // { dg-message "note" }
700 seven sink_5_24567(volatile       A&&);  // { dg-message "note" }
701 
702 int test5_24567()
703 {
704                    A a;
705     const          A ca = a; // { dg-error "deleted" }
706           volatile A va;
707     const volatile A cva = a; // { dg-error "deleted" }
708     sink_5_24567(cv_source());  // { dg-error "no match" }
709     // { dg-message "candidate" "candidate note" { target *-*-* } 708 }
710     return 0;
711 }
712 
713 two   sink_5_24678(const          A&);  // { dg-message "note" }
714 four  sink_5_24678(const volatile A&);
715 six   sink_5_24678(const          A&&);  // { dg-message "note" }
716 seven sink_5_24678(volatile       A&&);  // { dg-message "note" }
717 eight sink_5_24678(const volatile A&&);  // { dg-message "note" }
718 
719 int test5_24678()
720 {
721                    A a;
722     const          A ca = a; // { dg-error "deleted" }
723           volatile A va;
724     const volatile A cva = a; // { dg-error "deleted" }
725     sink_5_24678(source());  // { dg-error "ambiguous" }
726     // { dg-message "candidate" "candidate note" { target *-*-* } 725 }
727     return 0;
728 }
729 
730 two   sink_5_25678(const          A&);
731 five  sink_5_25678(               A&&);
732 six   sink_5_25678(const          A&&);
733 seven sink_5_25678(volatile       A&&); // { dg-message "" }
734 eight sink_5_25678(const volatile A&&); // { dg-message "" }
735 
736 int test5_25678()
737 {
738                    A a;
739     const          A ca = a; // { dg-error "deleted" }
740           volatile A va;
741     const volatile A cva = a; // { dg-error "deleted" }
742     sink_5_25678(va);		// { dg-error "lvalue" }
743     sink_5_25678(cva);		// { dg-error "lvalue" }
744     return 0;
745 }
746 
747 three sink_5_34567(volatile       A&);  // { dg-message "three sink_5_34567|no known conversion" }
748 four  sink_5_34567(const volatile A&);  // { dg-message "note" }
749 five  sink_5_34567(               A&&);  // { dg-message "note" }
750 six   sink_5_34567(const          A&&);  // { dg-message "note" }
751 seven sink_5_34567(volatile       A&&);  // { dg-message "note" }
752 
753 int test5_34567()
754 {
755                    A a;
756     const          A ca = a; // { dg-error "deleted" }
757           volatile A va;
758     const volatile A cva = a; // { dg-error "deleted" }
759     sink_5_34567(cv_source());  // { dg-error "no match" }
760     // { dg-message "candidate" "candidate note" { target *-*-* } 759 }
761     return 0;
762 }
763 
764 three sink_5_34678(volatile       A&);
765 four  sink_5_34678(const volatile A&);
766 six   sink_5_34678(const          A&&);  // { dg-message "note" }
767 seven sink_5_34678(volatile       A&&);  // { dg-message "note" }
768 eight sink_5_34678(const volatile A&&);  // { dg-message "note" }
769 
770 int test5_34678()
771 {
772                    A a;
773     const          A ca = a; // { dg-error "deleted" }
774           volatile A va;
775     const volatile A cva = a; // { dg-error "deleted" }
776     sink_5_34678(source());  // { dg-error "ambiguous" }
777     // { dg-message "candidate" "candidate note" { target *-*-* } 776 }
778     return 0;
779 }
780 
781 three sink_5_35678(volatile       A&);
782 five  sink_5_35678(               A&&);
783 six   sink_5_35678(const          A&&); // { dg-message "" }
784 seven sink_5_35678(volatile       A&&);
785 eight sink_5_35678(const volatile A&&); // { dg-message "" }
786 
787 int test5_35678()
788 {
789                    A a;
790     const          A ca = a; // { dg-error "deleted" }
791           volatile A va;
792     const volatile A cva = a; // { dg-error "deleted" }
793     sink_5_35678(ca);		// { dg-error "lvalue" }
794     sink_5_35678(cva);		// { dg-error "lvalue" }
795     return 0;
796 }
797 
798 int main()
799 {
800     return test5_12356() + test5_12357() + test5_12367() + test5_12467() +
801            test5_12567() + test5_12678() + test5_13467() + test5_13567() +
802            test5_13678() + test5_13678() + test5_23456() + test5_23457() +
803            test5_23458() + test5_23467() + test5_23468() + test5_23478() +
804            test5_23567() + test5_23568() + test5_23578() + test5_23678() +
805            test5_24678() + test5_34678();
806 }
807