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
8template <bool> struct sa;
9template <> struct sa<true> {};
10
11struct one   {char x[1];};
12struct two   {char x[2];};
13struct three {char x[3];};
14struct four  {char x[4];};
15struct five  {char x[5];};
16struct six   {char x[6];};
17struct seven {char x[7];};
18struct eight {char x[8];};
19
20struct A
21{
22    A();
23    A(const volatile A&&);
24};
25
26               A    source();
27const          A  c_source();
28      volatile A  v_source();
29const volatile A cv_source();
30
31// 4 at a time
32
33one   sink_4_1234(               A&);
34two   sink_4_1234(const          A&);
35three sink_4_1234(volatile       A&);
36four  sink_4_1234(const volatile A&);
37
38int 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
49one   sink_4_1235(               A&);
50two   sink_4_1235(const          A&);
51three sink_4_1235(volatile       A&);
52five  sink_4_1235(               A&&);
53
54int 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
66one   sink_4_1236(               A&);
67two   sink_4_1236(const          A&);
68three sink_4_1236(volatile       A&);
69six   sink_4_1236(const          A&&);
70
71int 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
83one   sink_4_1237(               A&);
84two   sink_4_1237(const          A&);
85three sink_4_1237(volatile       A&);
86seven sink_4_1237(volatile       A&&);
87
88int 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
99one   sink_4_1238(               A&);
100two   sink_4_1238(const          A&);
101three sink_4_1238(volatile       A&);
102eight sink_4_1238(const volatile A&&); // { dg-message "" }
103
104int 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
114one   sink_4_1245(               A&);
115two   sink_4_1245(const          A&);
116four  sink_4_1245(const volatile A&);
117five  sink_4_1245(               A&&);
118
119int 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
130one   sink_4_1246(               A&);
131two   sink_4_1246(const          A&);
132four  sink_4_1246(const volatile A&);
133six   sink_4_1246(const          A&&);
134
135int 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
146one   sink_4_1247(               A&);
147two   sink_4_1247(const          A&);
148four  sink_4_1247(const volatile A&);
149seven sink_4_1247(volatile       A&&);
150
151int 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
161one   sink_4_1256(               A&);
162two   sink_4_1256(const          A&);
163five  sink_4_1256(               A&&);
164six   sink_4_1256(const          A&&);
165
166int 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
179one   sink_4_1257(               A&);
180two   sink_4_1257(const          A&);
181five  sink_4_1257(               A&&);
182seven sink_4_1257(volatile       A&&);
183
184int 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
196one   sink_4_1258(               A&);
197two   sink_4_1258(const          A&);
198five  sink_4_1258(               A&&);
199eight sink_4_1258(const volatile A&&); // { dg-message "" }
200
201int 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
212one   sink_4_1267(               A&);
213two   sink_4_1267(const          A&);
214six   sink_4_1267(const          A&&);
215seven sink_4_1267(volatile       A&&);
216
217int 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
230one   sink_4_1268(               A&);
231two   sink_4_1268(const          A&);
232six   sink_4_1268(const          A&&);
233eight sink_4_1268(const volatile A&&); // { dg-message "" }
234
235int 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
246one   sink_4_1278(               A&);
247two   sink_4_1278(const          A&);
248seven sink_4_1278(volatile       A&&); // { dg-message "" }
249eight sink_4_1278(const volatile A&&); // { dg-message "" }
250
251int 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
262one   sink_4_1345(               A&);
263three sink_4_1345(volatile       A&);
264four  sink_4_1345(const volatile A&);
265five  sink_4_1345(               A&&);
266
267int 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
279one   sink_4_1346(               A&);
280three sink_4_1346(volatile       A&);
281four  sink_4_1346(const volatile A&);
282six   sink_4_1346(const          A&&);
283
284int 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
295one   sink_4_1347(               A&);
296three sink_4_1347(volatile       A&);
297four  sink_4_1347(const volatile A&);
298seven sink_4_1347(volatile       A&&);
299
300int 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
311one   sink_4_1356(               A&);
312three sink_4_1356(volatile       A&);
313five  sink_4_1356(               A&&);
314six   sink_4_1356(const          A&&);
315
316int 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
329one   sink_4_1357(               A&);
330three sink_4_1357(volatile       A&);
331five  sink_4_1357(               A&&);
332seven sink_4_1357(volatile       A&&);
333
334int 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
347one   sink_4_1358(               A&);
348three sink_4_1358(volatile       A&);
349five  sink_4_1358(               A&&);
350eight sink_4_1358(const volatile A&&); // { dg-message "" }
351
352int 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
363one   sink_4_1367(               A&);
364three sink_4_1367(volatile       A&);
365six   sink_4_1367(const          A&&);
366seven sink_4_1367(volatile       A&&);
367
368int 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
381one   sink_4_1368(               A&);
382three sink_4_1368(volatile       A&);
383six   sink_4_1368(const          A&&); // { dg-message "" }
384eight sink_4_1368(const volatile A&&); // { dg-message "" }
385
386int 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
397one   sink_4_1378(               A&);
398three sink_4_1378(volatile       A&);
399seven sink_4_1378(volatile       A&&);
400eight sink_4_1378(const volatile A&&); // { dg-message "" }
401
402int 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
413one   sink_4_1456(               A&);
414four  sink_4_1456(const volatile A&);
415five  sink_4_1456(               A&&);
416six   sink_4_1456(const          A&&);
417
418int 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
429one   sink_4_1457(               A&);
430four  sink_4_1457(const volatile A&);
431five  sink_4_1457(               A&&);
432seven sink_4_1457(volatile       A&&);
433
434int 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
445one   sink_4_1467(               A&);
446four  sink_4_1467(const volatile A&);
447six   sink_4_1467(const          A&&);
448seven sink_4_1467(volatile       A&&);
449
450int 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
461one   sink_4_1567(               A&);
462five  sink_4_1567(               A&&);
463six   sink_4_1567(const          A&&);
464seven sink_4_1567(volatile       A&&);
465
466int 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
479one   sink_4_1568(               A&);
480five  sink_4_1568(               A&&);
481six   sink_4_1568(const          A&&); // { dg-message "" }
482eight sink_4_1568(const volatile A&&); // { dg-message "" }
483
484int 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
496one   sink_4_1578(               A&);
497five  sink_4_1578(               A&&);
498seven sink_4_1578(volatile       A&&); // { dg-message "" }
499eight sink_4_1578(const volatile A&&); // { dg-message "" }
500
501int 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
513one   sink_4_1678(               A&);
514six   sink_4_1678(const          A&&);
515seven sink_4_1678(volatile       A&&);
516eight sink_4_1678(const volatile A&&);
517
518int 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
531two   sink_4_2345(const          A&);
532three sink_4_2345(volatile       A&);
533four  sink_4_2345(const volatile A&);
534five  sink_4_2345(               A&&);
535
536int 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
548two   sink_4_2346(const          A&);
549three sink_4_2346(volatile       A&);
550four  sink_4_2346(const volatile A&);
551six   sink_4_2346(const          A&&);
552
553int 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
565two   sink_4_2347(const          A&);
566three sink_4_2347(volatile       A&);
567four  sink_4_2347(const volatile A&);
568seven sink_4_2347(volatile       A&&);
569
570int 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
581two   sink_4_2348(const          A&);
582three sink_4_2348(volatile       A&);
583four  sink_4_2348(const volatile A&);
584eight sink_4_2348(const volatile A&&);
585
586int 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
596two   sink_4_2356(const          A&);
597three sink_4_2356(volatile       A&);
598five  sink_4_2356(               A&&);
599six   sink_4_2356(const          A&&);
600
601int 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
614two   sink_4_2357(const          A&);
615three sink_4_2357(volatile       A&);
616five  sink_4_2357(               A&&);
617seven sink_4_2357(volatile       A&&);
618
619int 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
631two   sink_4_2358(const          A&);
632three sink_4_2358(volatile       A&);
633five  sink_4_2358(               A&&);
634eight sink_4_2358(const volatile A&&);
635
636int 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
647two   sink_4_2367(const          A&);
648three sink_4_2367(volatile       A&);
649six   sink_4_2367(const          A&&);
650seven sink_4_2367(volatile       A&&);
651
652int 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
665two   sink_4_2368(const          A&);
666three sink_4_2368(volatile       A&);
667six   sink_4_2368(const          A&&);
668eight sink_4_2368(const volatile A&&);
669
670int 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
681two   sink_4_2378(const          A&);
682three sink_4_2378(volatile       A&);
683seven sink_4_2378(volatile       A&&);
684eight sink_4_2378(const volatile A&&);
685
686int 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
697two   sink_4_2456(const          A&);
698four  sink_4_2456(const volatile A&);
699five  sink_4_2456(               A&&);
700six   sink_4_2456(const          A&&);
701
702int 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
713two   sink_4_2457(const          A&);
714four  sink_4_2457(const volatile A&);
715five  sink_4_2457(               A&&);
716seven sink_4_2457(volatile       A&&);
717
718int 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
728two   sink_4_2467(const          A&);
729four  sink_4_2467(const volatile A&);
730six   sink_4_2467(const          A&&);
731seven sink_4_2467(volatile       A&&);
732
733int 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
744two   sink_4_2567(const          A&);
745five  sink_4_2567(               A&&);
746six   sink_4_2567(const          A&&);
747seven sink_4_2567(volatile       A&&);
748
749int 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
761two   sink_4_2568(const          A&);
762five  sink_4_2568(               A&&);
763six   sink_4_2568(const          A&&);
764eight sink_4_2568(const volatile A&&); // { dg-message "" }
765
766int 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
777two   sink_4_2578(const          A&);
778five  sink_4_2578(               A&&);
779seven sink_4_2578(volatile       A&&); // { dg-message "" }
780eight sink_4_2578(const volatile A&&); // { dg-message "" }
781
782int 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
793two   sink_4_2678(const          A&);
794six   sink_4_2678(const          A&&);
795seven sink_4_2678(volatile       A&&);
796eight sink_4_2678(const volatile A&&);
797
798int 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
810three sink_4_3456(volatile       A&);
811four  sink_4_3456(const volatile A&);
812five  sink_4_3456(               A&&);
813six   sink_4_3456(const          A&&);
814
815int 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
826three sink_4_3457(volatile       A&);
827four  sink_4_3457(const volatile A&);
828five  sink_4_3457(               A&&);
829seven sink_4_3457(volatile       A&&);
830
831int 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
842three sink_4_3467(volatile       A&);
843four  sink_4_3467(const volatile A&);
844six   sink_4_3467(const          A&&);
845seven sink_4_3467(volatile       A&&);
846
847int 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
858three sink_4_3567(volatile       A&);
859five  sink_4_3567(               A&&);
860six   sink_4_3567(const          A&&);
861seven sink_4_3567(volatile       A&&);
862
863int 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
875three sink_4_3568(volatile       A&);
876five  sink_4_3568(               A&&);
877six   sink_4_3568(const          A&&); // { dg-message "" }
878eight sink_4_3568(const volatile A&&); // { dg-message "" }
879
880int 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
891three sink_4_3578(volatile       A&);
892five  sink_4_3578(               A&&);
893seven sink_4_3578(volatile       A&&);
894eight sink_4_3578(const volatile A&&); // { dg-message "" }
895
896int 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
907three sink_4_3678(volatile       A&);
908six   sink_4_3678(const          A&&);
909seven sink_4_3678(volatile       A&&);
910eight sink_4_3678(const volatile A&&);
911
912int 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
924four  sink_4_4567(const volatile A&);
925five  sink_4_4567(               A&&);
926six   sink_4_4567(const          A&&);
927seven sink_4_4567(volatile       A&&);
928
929int 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
939four  sink_4_4678(const volatile A&);
940six   sink_4_4678(const          A&&);
941seven sink_4_4678(volatile       A&&);
942eight sink_4_4678(const volatile A&&);
943
944int 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
954five  sink_4_5678(               A&&); // { dg-message "" }
955six   sink_4_5678(const          A&&); // { dg-message "" }
956seven sink_4_5678(volatile       A&&); // { dg-message "" }
957eight sink_4_5678(const volatile A&&); // { dg-message "" }
958
959int 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
972int 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