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