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 // 4 at a time
32 
33 one   sink_4_1234(               A&);
34 two   sink_4_1234(const          A&);
35 three sink_4_1234(volatile       A&);
36 four  sink_4_1234(const volatile A&);
37 
38 int test4_1234()
39 {
40                    A a;
41     const          A ca = a; // { dg-error "deleted" }
42           volatile A va;
43     const volatile A cva = a; // { dg-error "deleted" }
44     sink_4_1234(v_source());   // { dg-error "" }
45     sink_4_1234(cv_source());  // { dg-error "" }
46     return 0;
47 }
48 
49 one   sink_4_1235(               A&);
50 two   sink_4_1235(const          A&);
51 three sink_4_1235(volatile       A&);
52 five  sink_4_1235(               A&&);
53 
54 int test4_1235()
55 {
56                    A a;
57     const          A ca = a; // { dg-error "deleted" }
58           volatile A va;
59     const volatile A cva = a; // { dg-error "deleted" }
60     sink_4_1235(cva);          // { dg-error "" }
61     sink_4_1235(v_source());   // { dg-error "" }
62     sink_4_1235(cv_source());  // { dg-error "" }
63     return 0;
64 }
65 
66 one   sink_4_1236(               A&);
67 two   sink_4_1236(const          A&);
68 three sink_4_1236(volatile       A&);
69 six   sink_4_1236(const          A&&);
70 
71 int test4_1236()
72 {
73                    A a;
74     const          A ca = a; // { dg-error "deleted" }
75           volatile A va;
76     const volatile A cva = a; // { dg-error "deleted" }
77     sink_4_1236(cva);          // { dg-error "" }
78     sink_4_1236(v_source());   // { dg-error "" }
79     sink_4_1236(cv_source());  // { dg-error "" }
80     return 0;
81 }
82 
83 one   sink_4_1237(               A&);
84 two   sink_4_1237(const          A&);
85 three sink_4_1237(volatile       A&);
86 seven sink_4_1237(volatile       A&&);
87 
88 int test4_1237()
89 {
90                    A a;
91     const          A ca = a; // { dg-error "deleted" }
92           volatile A va;
93     const volatile A cva = a; // { dg-error "deleted" }
94     sink_4_1237(cva);          // { dg-error "" }
95     sink_4_1237(cv_source());  // { dg-error "" }
96     return 0;
97 }
98 
99 one   sink_4_1238(               A&);
100 two   sink_4_1238(const          A&);
101 three sink_4_1238(volatile       A&);
102 eight sink_4_1238(const volatile A&&); // { dg-message "" }
103 
104 int test4_1238()
105 {
106                    A a;
107     const          A ca = a; // { dg-error "deleted" }
108           volatile A va;
109     const volatile A cva = a; // { dg-error "deleted" }
110     sink_4_1238(cva);		// { dg-error "" }
111     return 0;
112 }
113 
114 one   sink_4_1245(               A&);
115 two   sink_4_1245(const          A&);
116 four  sink_4_1245(const volatile A&);
117 five  sink_4_1245(               A&&);
118 
119 int test4_1245()
120 {
121                    A a;
122     const          A ca = a; // { dg-error "deleted" }
123           volatile A va;
124     const volatile A cva = a; // { dg-error "deleted" }
125     sink_4_1245(v_source());   // { dg-error "" }
126     sink_4_1245(cv_source());  // { dg-error "" }
127     return 0;
128 }
129 
130 one   sink_4_1246(               A&);
131 two   sink_4_1246(const          A&);
132 four  sink_4_1246(const volatile A&);
133 six   sink_4_1246(const          A&&);
134 
135 int test4_1246()
136 {
137                    A a;
138     const          A ca = a; // { dg-error "deleted" }
139           volatile A va;
140     const volatile A cva = a; // { dg-error "deleted" }
141     sink_4_1246(v_source());   // { dg-error "" }
142     sink_4_1246(cv_source());  // { dg-error "" }
143     return 0;
144 }
145 
146 one   sink_4_1247(               A&);
147 two   sink_4_1247(const          A&);
148 four  sink_4_1247(const volatile A&);
149 seven sink_4_1247(volatile       A&&);
150 
151 int test4_1247()
152 {
153                    A a;
154     const          A ca = a; // { dg-error "deleted" }
155           volatile A va;
156     const volatile A cva = a; // { dg-error "deleted" }
157     sink_4_1247(cv_source());  // { dg-error "" }
158     return 0;
159 }
160 
161 one   sink_4_1256(               A&);
162 two   sink_4_1256(const          A&);
163 five  sink_4_1256(               A&&);
164 six   sink_4_1256(const          A&&);
165 
166 int test4_1256()
167 {
168                    A a;
169     const          A ca = a; // { dg-error "deleted" }
170           volatile A va;
171     const volatile A cva = a; // { dg-error "deleted" }
172     sink_4_1256(va);           // { dg-error "" }
173     sink_4_1256(cva);          // { dg-error "" }
174     sink_4_1256(v_source());   // { dg-error "" }
175     sink_4_1256(cv_source());  // { dg-error "" }
176     return 0;
177 }
178 
179 one   sink_4_1257(               A&);
180 two   sink_4_1257(const          A&);
181 five  sink_4_1257(               A&&);
182 seven sink_4_1257(volatile       A&&);
183 
184 int test4_1257()
185 {
186                    A a;
187     const          A ca = a; // { dg-error "deleted" }
188           volatile A va;
189     const volatile A cva = a; // { dg-error "deleted" }
190     sink_4_1257(va);		// { dg-error "" }
191     sink_4_1257(cva);          // { dg-error "" }
192     sink_4_1257(cv_source());  // { dg-error "" }
193     return 0;
194 }
195 
196 one   sink_4_1258(               A&);
197 two   sink_4_1258(const          A&);
198 five  sink_4_1258(               A&&);
199 eight sink_4_1258(const volatile A&&); // { dg-message "" }
200 
201 int test4_1258()
202 {
203                    A a;
204     const          A ca = a; // { dg-error "deleted" }
205           volatile A va;
206     const volatile A cva = a; // { dg-error "deleted" }
207     sink_4_1258(va);		// { dg-error "" }
208     sink_4_1258(cva);		// { dg-error "" }
209     return 0;
210 }
211 
212 one   sink_4_1267(               A&);
213 two   sink_4_1267(const          A&);
214 six   sink_4_1267(const          A&&);
215 seven sink_4_1267(volatile       A&&);
216 
217 int test4_1267()
218 {
219                    A a;
220     const          A ca = a; // { dg-error "deleted" }
221           volatile A va;
222     const volatile A cva = a; // { dg-error "deleted" }
223     sink_4_1267(va);		// { dg-error "" }
224     sink_4_1267(cva);          // { dg-error "" }
225     sink_4_1267(source());     // { dg-error "" }
226     sink_4_1267(cv_source());  // { dg-error "" }
227     return 0;
228 }
229 
230 one   sink_4_1268(               A&);
231 two   sink_4_1268(const          A&);
232 six   sink_4_1268(const          A&&);
233 eight sink_4_1268(const volatile A&&); // { dg-message "" }
234 
235 int test4_1268()
236 {
237                    A a;
238     const          A ca = a; // { dg-error "deleted" }
239           volatile A va;
240     const volatile A cva = a; // { dg-error "deleted" }
241     sink_4_1268(va);		// { dg-error "" }
242     sink_4_1268(cva);		// { dg-error "" }
243     return 0;
244 }
245 
246 one   sink_4_1278(               A&);
247 two   sink_4_1278(const          A&);
248 seven sink_4_1278(volatile       A&&); // { dg-message "" }
249 eight sink_4_1278(const volatile A&&); // { dg-message "" }
250 
251 int test4_1278()
252 {
253                    A a;
254     const          A ca = a; // { dg-error "deleted" }
255           volatile A va;
256     const volatile A cva = a; // { dg-error "deleted" }
257     sink_4_1278(va);		// { dg-error "" }
258     sink_4_1278(cva);		// { dg-error "" }
259     return 0;
260 }
261 
262 one   sink_4_1345(               A&);
263 three sink_4_1345(volatile       A&);
264 four  sink_4_1345(const volatile A&);
265 five  sink_4_1345(               A&&);
266 
267 int test4_1345()
268 {
269                    A a;
270     const          A ca = a; // { dg-error "deleted" }
271           volatile A va;
272     const volatile A cva = a; // { dg-error "deleted" }
273     sink_4_1345(c_source());   // { dg-error "" }
274     sink_4_1345(v_source());   // { dg-error "" }
275     sink_4_1345(cv_source());  // { dg-error "" }
276     return 0;
277 }
278 
279 one   sink_4_1346(               A&);
280 three sink_4_1346(volatile       A&);
281 four  sink_4_1346(const volatile A&);
282 six   sink_4_1346(const          A&&);
283 
284 int test4_1346()
285 {
286                    A a;
287     const          A ca = a; // { dg-error "deleted" }
288           volatile A va;
289     const volatile A cva = a; // { dg-error "deleted" }
290     sink_4_1346(v_source());   // { dg-error "" }
291     sink_4_1346(cv_source());  // { dg-error "" }
292     return 0;
293 }
294 
295 one   sink_4_1347(               A&);
296 three sink_4_1347(volatile       A&);
297 four  sink_4_1347(const volatile A&);
298 seven sink_4_1347(volatile       A&&);
299 
300 int test4_1347()
301 {
302                    A a;
303     const          A ca = a; // { dg-error "deleted" }
304           volatile A va;
305     const volatile A cva = a; // { dg-error "deleted" }
306     sink_4_1347(c_source());   // { dg-error "" }
307     sink_4_1347(cv_source());  // { dg-error "" }
308     return 0;
309 }
310 
311 one   sink_4_1356(               A&);
312 three sink_4_1356(volatile       A&);
313 five  sink_4_1356(               A&&);
314 six   sink_4_1356(const          A&&);
315 
316 int test4_1356()
317 {
318                    A a;
319     const          A ca = a; // { dg-error "deleted" }
320           volatile A va;
321     const volatile A cva = a; // { dg-error "deleted" }
322     sink_4_1356(ca);		// { dg-error "" }
323     sink_4_1356(cva);          // { dg-error "" }
324     sink_4_1356(v_source());   // { dg-error "" }
325     sink_4_1356(cv_source());  // { dg-error "" }
326     return 0;
327 }
328 
329 one   sink_4_1357(               A&);
330 three sink_4_1357(volatile       A&);
331 five  sink_4_1357(               A&&);
332 seven sink_4_1357(volatile       A&&);
333 
334 int test4_1357()
335 {
336                    A a;
337     const          A ca = a; // { dg-error "deleted" }
338           volatile A va;
339     const volatile A cva = a; // { dg-error "deleted" }
340     sink_4_1357(ca);           // { dg-error "" }
341     sink_4_1357(cva);          // { dg-error "" }
342     sink_4_1357(c_source());   // { dg-error "" }
343     sink_4_1357(cv_source());  // { dg-error "" }
344     return 0;
345 }
346 
347 one   sink_4_1358(               A&);
348 three sink_4_1358(volatile       A&);
349 five  sink_4_1358(               A&&);
350 eight sink_4_1358(const volatile A&&); // { dg-message "" }
351 
352 int test4_1358()
353 {
354                    A a;
355     const          A ca = a; // { dg-error "deleted" }
356           volatile A va;
357     const volatile A cva = a; // { dg-error "deleted" }
358     sink_4_1358(ca);		// { dg-error "" }
359     sink_4_1358(cva);		// { dg-error "" }
360     return 0;
361 }
362 
363 one   sink_4_1367(               A&);
364 three sink_4_1367(volatile       A&);
365 six   sink_4_1367(const          A&&);
366 seven sink_4_1367(volatile       A&&);
367 
368 int test4_1367()
369 {
370                    A a;
371     const          A ca = a; // { dg-error "deleted" }
372           volatile A va;
373     const volatile A cva = a; // { dg-error "deleted" }
374     sink_4_1367(ca);		// { dg-error "" }
375     sink_4_1367(cva);          // { dg-error "" }
376     sink_4_1367(source());     // { dg-error "" }
377     sink_4_1367(cv_source());  // { dg-error "" }
378     return 0;
379 }
380 
381 one   sink_4_1368(               A&);
382 three sink_4_1368(volatile       A&);
383 six   sink_4_1368(const          A&&); // { dg-message "" }
384 eight sink_4_1368(const volatile A&&); // { dg-message "" }
385 
386 int test4_1368()
387 {
388                    A a;
389     const          A ca = a; // { dg-error "deleted" }
390           volatile A va;
391     const volatile A cva = a; // { dg-error "deleted" }
392     sink_4_1368(ca);		// { dg-error "" }
393     sink_4_1368(cva);		// { dg-error "" }
394     return 0;
395 }
396 
397 one   sink_4_1378(               A&);
398 three sink_4_1378(volatile       A&);
399 seven sink_4_1378(volatile       A&&);
400 eight sink_4_1378(const volatile A&&); // { dg-message "" }
401 
402 int test4_1378()
403 {
404                    A a;
405     const          A ca = a; // { dg-error "deleted" }
406           volatile A va;
407     const volatile A cva = a; // { dg-error "deleted" }
408     sink_4_1378(ca);		// { dg-error "" }
409     sink_4_1378(cva);		// { dg-error "" }
410     return 0;
411 }
412 
413 one   sink_4_1456(               A&);
414 four  sink_4_1456(const volatile A&);
415 five  sink_4_1456(               A&&);
416 six   sink_4_1456(const          A&&);
417 
418 int test4_1456()
419 {
420                    A a;
421     const          A ca = a; // { dg-error "deleted" }
422           volatile A va;
423     const volatile A cva = a; // { dg-error "deleted" }
424     sink_4_1456(v_source());   // { dg-error "" }
425     sink_4_1456(cv_source());  // { dg-error "" }
426     return 0;
427 }
428 
429 one   sink_4_1457(               A&);
430 four  sink_4_1457(const volatile A&);
431 five  sink_4_1457(               A&&);
432 seven sink_4_1457(volatile       A&&);
433 
434 int test4_1457()
435 {
436                    A a;
437     const          A ca = a; // { dg-error "deleted" }
438           volatile A va;
439     const volatile A cva = a; // { dg-error "deleted" }
440     sink_4_1457(c_source());   // { dg-error "" }
441     sink_4_1457(cv_source());  // { dg-error "" }
442     return 0;
443 }
444 
445 one   sink_4_1467(               A&);
446 four  sink_4_1467(const volatile A&);
447 six   sink_4_1467(const          A&&);
448 seven sink_4_1467(volatile       A&&);
449 
450 int test4_1467()
451 {
452                    A a;
453     const          A ca = a; // { dg-error "deleted" }
454           volatile A va;
455     const volatile A cva = a; // { dg-error "deleted" }
456     sink_4_1467(source());     // { dg-error "" }
457     sink_4_1467(cv_source());  // { dg-error "" }
458     return 0;
459 }
460 
461 one   sink_4_1567(               A&);
462 five  sink_4_1567(               A&&);
463 six   sink_4_1567(const          A&&);
464 seven sink_4_1567(volatile       A&&);
465 
466 int test4_1567()
467 {
468                    A a;
469     const          A ca = a; // { dg-error "deleted" }
470           volatile A va;
471     const volatile A cva = a; // { dg-error "deleted" }
472     sink_4_1567(ca);	       // { dg-error "" }
473     sink_4_1567(va);	       // { dg-error "" }
474     sink_4_1567(cva);          // { dg-error "" }
475     sink_4_1567(cv_source());  // { dg-error "" }
476     return 0;
477 }
478 
479 one   sink_4_1568(               A&);
480 five  sink_4_1568(               A&&);
481 six   sink_4_1568(const          A&&); // { dg-message "" }
482 eight sink_4_1568(const volatile A&&); // { dg-message "" }
483 
484 int test4_1568()
485 {
486                    A a;
487     const          A ca = a; // { dg-error "deleted" }
488           volatile A va;
489     const volatile A cva = a; // { dg-error "deleted" }
490     sink_4_1568(ca);		// { dg-error "" }
491     sink_4_1568(va);		// { dg-error "" }
492     sink_4_1568(cva);		// { dg-error "" }
493     return 0;
494 }
495 
496 one   sink_4_1578(               A&);
497 five  sink_4_1578(               A&&);
498 seven sink_4_1578(volatile       A&&); // { dg-message "" }
499 eight sink_4_1578(const volatile A&&); // { dg-message "" }
500 
501 int test4_1578()
502 {
503                    A a;
504     const          A ca = a; // { dg-error "deleted" }
505           volatile A va;
506     const volatile A cva = a; // { dg-error "deleted" }
507     sink_4_1578(ca);		// { dg-error "" }
508     sink_4_1578(va);		// { dg-error "" }
509     sink_4_1578(cva);		// { dg-error "" }
510     return 0;
511 }
512 
513 one   sink_4_1678(               A&);
514 six   sink_4_1678(const          A&&);
515 seven sink_4_1678(volatile       A&&);
516 eight sink_4_1678(const volatile A&&);
517 
518 int test4_1678()
519 {
520                    A a;
521     const          A ca = a; // { dg-error "deleted" }
522           volatile A va;
523     const volatile A cva = a; // { dg-error "deleted" }
524     sink_4_1678(ca);		// { dg-error "" }
525     sink_4_1678(va);		// { dg-error "" }
526     sink_4_1678(cva);		// { dg-error "" }
527     sink_4_1678(source());  // { dg-error "" }
528     return 0;
529 }
530 
531 two   sink_4_2345(const          A&);
532 three sink_4_2345(volatile       A&);
533 four  sink_4_2345(const volatile A&);
534 five  sink_4_2345(               A&&);
535 
536 int test4_2345()
537 {
538                    A a;
539     const          A ca = a; // { dg-error "deleted" }
540           volatile A va;
541     const volatile A cva = a; // { dg-error "deleted" }
542     sink_4_2345(a);            // { dg-error "" }
543     sink_4_2345(v_source());   // { dg-error "" }
544     sink_4_2345(cv_source());  // { dg-error "" }
545     return 0;
546 }
547 
548 two   sink_4_2346(const          A&);
549 three sink_4_2346(volatile       A&);
550 four  sink_4_2346(const volatile A&);
551 six   sink_4_2346(const          A&&);
552 
553 int test4_2346()
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_4_2346(a);            // { dg-error "" }
560     sink_4_2346(v_source());   // { dg-error "" }
561     sink_4_2346(cv_source());  // { dg-error "" }
562     return 0;
563 }
564 
565 two   sink_4_2347(const          A&);
566 three sink_4_2347(volatile       A&);
567 four  sink_4_2347(const volatile A&);
568 seven sink_4_2347(volatile       A&&);
569 
570 int test4_2347()
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_4_2347(a);            // { dg-error "" }
577     sink_4_2347(cv_source());  // { dg-error "" }
578     return 0;
579 }
580 
581 two   sink_4_2348(const          A&);
582 three sink_4_2348(volatile       A&);
583 four  sink_4_2348(const volatile A&);
584 eight sink_4_2348(const volatile A&&);
585 
586 int test4_2348()
587 {
588                    A a;
589     const          A ca = a; // { dg-error "deleted" }
590           volatile A va;
591     const volatile A cva = a; // { dg-error "deleted" }
592     sink_4_2348(a);  // { dg-error "" }
593     return 0;
594 }
595 
596 two   sink_4_2356(const          A&);
597 three sink_4_2356(volatile       A&);
598 five  sink_4_2356(               A&&);
599 six   sink_4_2356(const          A&&);
600 
601 int test4_2356()
602 {
603                    A a;
604     const          A ca = a; // { dg-error "deleted" }
605           volatile A va;
606     const volatile A cva = a; // { dg-error "deleted" }
607     sink_4_2356(a);            // { dg-error "" }
608     sink_4_2356(cva);          // { dg-error "" }
609     sink_4_2356(v_source());   // { dg-error "" }
610     sink_4_2356(cv_source());  // { dg-error "" }
611     return 0;
612 }
613 
614 two   sink_4_2357(const          A&);
615 three sink_4_2357(volatile       A&);
616 five  sink_4_2357(               A&&);
617 seven sink_4_2357(volatile       A&&);
618 
619 int test4_2357()
620 {
621                    A a;
622     const          A ca = a; // { dg-error "deleted" }
623           volatile A va;
624     const volatile A cva = a; // { dg-error "deleted" }
625     sink_4_2357(a);            // { dg-error "" }
626     sink_4_2357(cva);          // { dg-error "" }
627     sink_4_2357(cv_source());  // { dg-error "" }
628     return 0;
629 }
630 
631 two   sink_4_2358(const          A&);
632 three sink_4_2358(volatile       A&);
633 five  sink_4_2358(               A&&);
634 eight sink_4_2358(const volatile A&&);
635 
636 int test4_2358()
637 {
638                    A a;
639     const          A ca = a; // { dg-error "deleted" }
640           volatile A va;
641     const volatile A cva = a; // { dg-error "deleted" }
642     sink_4_2358(a);  // { dg-error "" }
643     sink_4_2358(cva); // { dg-error "" }
644     return 0;
645 }
646 
647 two   sink_4_2367(const          A&);
648 three sink_4_2367(volatile       A&);
649 six   sink_4_2367(const          A&&);
650 seven sink_4_2367(volatile       A&&);
651 
652 int test4_2367()
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_4_2367(a);            // { dg-error "" }
659     sink_4_2367(cva);          // { dg-error "" }
660     sink_4_2367(source());     // { dg-error "" }
661     sink_4_2367(cv_source());  // { dg-error "" }
662     return 0;
663 }
664 
665 two   sink_4_2368(const          A&);
666 three sink_4_2368(volatile       A&);
667 six   sink_4_2368(const          A&&);
668 eight sink_4_2368(const volatile A&&);
669 
670 int test4_2368()
671 {
672                    A a;
673     const          A ca = a; // { dg-error "deleted" }
674           volatile A va;
675     const volatile A cva = a; // { dg-error "deleted" }
676     sink_4_2368(a);  // { dg-error "" }
677     sink_4_2368(cva); // { dg-error "" }
678     return 0;
679 }
680 
681 two   sink_4_2378(const          A&);
682 three sink_4_2378(volatile       A&);
683 seven sink_4_2378(volatile       A&&);
684 eight sink_4_2378(const volatile A&&);
685 
686 int test4_2378()
687 {
688                    A a;
689     const          A ca = a; // { dg-error "deleted" }
690           volatile A va;
691     const volatile A cva = a; // { dg-error "deleted" }
692     sink_4_2378(a);  // { dg-error "" }
693     sink_4_2378(cva); // { dg-error "" }
694     return 0;
695 }
696 
697 two   sink_4_2456(const          A&);
698 four  sink_4_2456(const volatile A&);
699 five  sink_4_2456(               A&&);
700 six   sink_4_2456(const          A&&);
701 
702 int test4_2456()
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_4_2456(v_source());   // { dg-error "" }
709     sink_4_2456(cv_source());  // { dg-error "" }
710     return 0;
711 }
712 
713 two   sink_4_2457(const          A&);
714 four  sink_4_2457(const volatile A&);
715 five  sink_4_2457(               A&&);
716 seven sink_4_2457(volatile       A&&);
717 
718 int test4_2457()
719 {
720                    A a;
721     const          A ca = a; // { dg-error "deleted" }
722           volatile A va;
723     const volatile A cva = a; // { dg-error "deleted" }
724     sink_4_2457(cv_source());  // { dg-error "" }
725     return 0;
726 }
727 
728 two   sink_4_2467(const          A&);
729 four  sink_4_2467(const volatile A&);
730 six   sink_4_2467(const          A&&);
731 seven sink_4_2467(volatile       A&&);
732 
733 int test4_2467()
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_4_2467(source());     // { dg-error "" }
740     sink_4_2467(cv_source());  // { dg-error "" }
741     return 0;
742 }
743 
744 two   sink_4_2567(const          A&);
745 five  sink_4_2567(               A&&);
746 six   sink_4_2567(const          A&&);
747 seven sink_4_2567(volatile       A&&);
748 
749 int test4_2567()
750 {
751                    A a;
752     const          A ca = a; // { dg-error "deleted" }
753           volatile A va;
754     const volatile A cva = a; // { dg-error "deleted" }
755     sink_4_2567(va);		// { dg-error "" }
756     sink_4_2567(cva);          // { dg-error "" }
757     sink_4_2567(cv_source());  // { dg-error "" }
758     return 0;
759 }
760 
761 two   sink_4_2568(const          A&);
762 five  sink_4_2568(               A&&);
763 six   sink_4_2568(const          A&&);
764 eight sink_4_2568(const volatile A&&); // { dg-message "" }
765 
766 int test4_2568()
767 {
768                    A a;
769     const          A ca = a; // { dg-error "deleted" }
770           volatile A va;
771     const volatile A cva = a; // { dg-error "deleted" }
772     sink_4_2568(va); // { dg-error "" }
773     sink_4_2568(cva); // { dg-error "" }
774     return 0;
775 }
776 
777 two   sink_4_2578(const          A&);
778 five  sink_4_2578(               A&&);
779 seven sink_4_2578(volatile       A&&); // { dg-message "" }
780 eight sink_4_2578(const volatile A&&); // { dg-message "" }
781 
782 int test4_2578()
783 {
784                    A a;
785     const          A ca = a; // { dg-error "deleted" }
786           volatile A va;
787     const volatile A cva = a; // { dg-error "deleted" }
788     sink_4_2578(va); // { dg-error "" }
789     sink_4_2578(cva); // { dg-error "" }
790     return 0;
791 }
792 
793 two   sink_4_2678(const          A&);
794 six   sink_4_2678(const          A&&);
795 seven sink_4_2678(volatile       A&&);
796 eight sink_4_2678(const volatile A&&);
797 
798 int test4_2678()
799 {
800                    A a;
801     const          A ca = a; // { dg-error "deleted" }
802           volatile A va;
803     const volatile A cva = a; // { dg-error "deleted" }
804     sink_4_2678(va); // { dg-error "" }
805     sink_4_2678(cva); // { dg-error "" }
806     sink_4_2678(source());  // { dg-error "" }
807     return 0;
808 }
809 
810 three sink_4_3456(volatile       A&);
811 four  sink_4_3456(const volatile A&);
812 five  sink_4_3456(               A&&);
813 six   sink_4_3456(const          A&&);
814 
815 int test4_3456()
816 {
817                    A a;
818     const          A ca = a; // { dg-error "deleted" }
819           volatile A va;
820     const volatile A cva = a; // { dg-error "deleted" }
821     sink_4_3456(v_source());   // { dg-error "" }
822     sink_4_3456(cv_source());  // { dg-error "" }
823     return 0;
824 }
825 
826 three sink_4_3457(volatile       A&);
827 four  sink_4_3457(const volatile A&);
828 five  sink_4_3457(               A&&);
829 seven sink_4_3457(volatile       A&&);
830 
831 int test4_3457()
832 {
833                    A a;
834     const          A ca = a; // { dg-error "deleted" }
835           volatile A va;
836     const volatile A cva = a; // { dg-error "deleted" }
837     sink_4_3457(c_source());   // { dg-error "" }
838     sink_4_3457(cv_source());  // { dg-error "" }
839     return 0;
840 }
841 
842 three sink_4_3467(volatile       A&);
843 four  sink_4_3467(const volatile A&);
844 six   sink_4_3467(const          A&&);
845 seven sink_4_3467(volatile       A&&);
846 
847 int test4_3467()
848 {
849                    A a;
850     const          A ca = a; // { dg-error "deleted" }
851           volatile A va;
852     const volatile A cva = a; // { dg-error "deleted" }
853     sink_4_3467(source());     // { dg-error "" }
854     sink_4_3467(cv_source());  // { dg-error "" }
855     return 0;
856 }
857 
858 three sink_4_3567(volatile       A&);
859 five  sink_4_3567(               A&&);
860 six   sink_4_3567(const          A&&);
861 seven sink_4_3567(volatile       A&&);
862 
863 int test4_3567()
864 {
865                    A a;
866     const          A ca = a; // { dg-error "deleted" }
867           volatile A va;
868     const volatile A cva = a; // { dg-error "deleted" }
869     sink_4_3567(ca);		// { dg-error "" }
870     sink_4_3567(cva);          // { dg-error "" }
871     sink_4_3567(cv_source());  // { dg-error "" }
872     return 0;
873 }
874 
875 three sink_4_3568(volatile       A&);
876 five  sink_4_3568(               A&&);
877 six   sink_4_3568(const          A&&); // { dg-message "" }
878 eight sink_4_3568(const volatile A&&); // { dg-message "" }
879 
880 int test4_3568()
881 {
882                    A a;
883     const          A ca = a; // { dg-error "deleted" }
884           volatile A va;
885     const volatile A cva = a; // { dg-error "deleted" }
886     sink_4_3568(ca); // { dg-error "" }
887     sink_4_3568(cva); // { dg-error "" }
888     return 0;
889 }
890 
891 three sink_4_3578(volatile       A&);
892 five  sink_4_3578(               A&&);
893 seven sink_4_3578(volatile       A&&);
894 eight sink_4_3578(const volatile A&&); // { dg-message "" }
895 
896 int test4_3578()
897 {
898                    A a;
899     const          A ca = a; // { dg-error "deleted" }
900           volatile A va;
901     const volatile A cva = a; // { dg-error "deleted" }
902     sink_4_3578(ca); // { dg-error "" }
903     sink_4_3578(cva); // { dg-error "" }
904     return 0;
905 }
906 
907 three sink_4_3678(volatile       A&);
908 six   sink_4_3678(const          A&&);
909 seven sink_4_3678(volatile       A&&);
910 eight sink_4_3678(const volatile A&&);
911 
912 int test4_3678()
913 {
914                    A a;
915     const          A ca = a; // { dg-error "deleted" }
916           volatile A va;
917     const volatile A cva = a; // { dg-error "deleted" }
918     sink_4_3678(ca);		// { dg-error "" }
919     sink_4_3678(cva);		// { dg-error "" }
920     sink_4_3678(source());  // { dg-error "" }
921     return 0;
922 }
923 
924 four  sink_4_4567(const volatile A&);
925 five  sink_4_4567(               A&&);
926 six   sink_4_4567(const          A&&);
927 seven sink_4_4567(volatile       A&&);
928 
929 int test4_4567()
930 {
931                    A a;
932     const          A ca = a; // { dg-error "deleted" }
933           volatile A va;
934     const volatile A cva = a; // { dg-error "deleted" }
935     sink_4_4567(cv_source());  // { dg-error "" }
936     return 0;
937 }
938 
939 four  sink_4_4678(const volatile A&);
940 six   sink_4_4678(const          A&&);
941 seven sink_4_4678(volatile       A&&);
942 eight sink_4_4678(const volatile A&&);
943 
944 int test4_4678()
945 {
946                    A a;
947     const          A ca = a; // { dg-error "deleted" }
948           volatile A va;
949     const volatile A cva = a; // { dg-error "deleted" }
950     sink_4_4678(source());  // { dg-error "" }
951     return 0;
952 }
953 
954 five  sink_4_5678(               A&&); // { dg-message "" }
955 six   sink_4_5678(const          A&&); // { dg-message "" }
956 seven sink_4_5678(volatile       A&&); // { dg-message "" }
957 eight sink_4_5678(const volatile A&&); // { dg-message "" }
958 
959 int test4_5678()
960 {
961                    A a;
962     const          A ca = a; // { dg-error "deleted" }
963           volatile A va;
964     const volatile A cva = a; // { dg-error "deleted" }
965     sink_4_5678(a);		// { dg-error "" }
966     sink_4_5678(ca);		// { dg-error "" }
967     sink_4_5678(va);		// { dg-error "" }
968     sink_4_5678(cva);		// { dg-error "" }
969     return 0;
970 }
971 
972 int main()
973 {
974     return test4_1235() + test4_1236() + test4_1237() + test4_1256() + test4_1257() +
975            test4_1267() + test4_1356() + test4_1357() + test4_1467() + test4_1567() +
976            test4_1678() + test4_2345() + test4_2346() + test4_2347() + test4_2348() +
977            test4_2356() + test4_2357() + test4_2358() + test4_2367() + test4_2368() +
978            test4_2378() + test4_2467() + test4_2567() + test4_2678() + test4_3467() +
979            test4_3567() + test4_3678() + test4_4678();
980 }
981