OSDN Git Service

524885f1d6079d97fc93e1d4f1ed438999238c20
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / cpp0x / rv4n.C
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&&);      // { dg-error "argument 1" }
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&);  // { dg-message "candidates" }
34 two   sink_4_1234(const          A&);  // { dg-message "note" }
35 three sink_4_1234(volatile       A&);  // { dg-message "note" }
36 four  sink_4_1234(const volatile A&);  // { dg-message "note" }
37
38 int test4_1234()
39 {
40                    A a;
41     const          A ca = a; // { dg-error "lvalue" }
42           volatile A va;
43     const volatile A cva = a; // { dg-error "lvalue" }
44     sink_4_1234(v_source());   // { dg-error "no match" }
45     sink_4_1234(cv_source());  // { dg-error "no match" }
46     return 0;
47 }
48
49 one   sink_4_1235(               A&);  // { dg-message "candidates" }
50 two   sink_4_1235(const          A&);  // { dg-message "note" }
51 three sink_4_1235(volatile       A&);  // { dg-message "note" }
52 five  sink_4_1235(               A&&);  // { dg-message "note" }
53
54 int test4_1235()
55 {
56                    A a;
57     const          A ca = a; // { dg-error "lvalue" }
58           volatile A va;
59     const volatile A cva = a; // { dg-error "lvalue" }
60     sink_4_1235(cva);          // { dg-error "no match" }
61     sink_4_1235(v_source());   // { dg-error "no match" }
62     sink_4_1235(cv_source());  // { dg-error "no match" }
63     return 0;
64 }
65
66 one   sink_4_1236(               A&);  // { dg-message "candidates" }
67 two   sink_4_1236(const          A&);  // { dg-message "note" }
68 three sink_4_1236(volatile       A&);  // { dg-message "note" }
69 six   sink_4_1236(const          A&&);  // { dg-message "note" }
70
71 int test4_1236()
72 {
73                    A a;
74     const          A ca = a; // { dg-error "lvalue" }
75           volatile A va;
76     const volatile A cva = a; // { dg-error "lvalue" }
77     sink_4_1236(cva);          // { dg-error "no match" }
78     sink_4_1236(v_source());   // { dg-error "no match" }
79     sink_4_1236(cv_source());  // { dg-error "no match" }
80     return 0;
81 }
82
83 one   sink_4_1237(               A&);  // { dg-message "candidates" }
84 two   sink_4_1237(const          A&);  // { dg-message "note" }
85 three sink_4_1237(volatile       A&);  // { dg-message "note" }
86 seven sink_4_1237(volatile       A&&);  // { dg-message "note" }
87
88 int test4_1237()
89 {
90                    A a;
91     const          A ca = a; // { dg-error "lvalue" }
92           volatile A va;
93     const volatile A cva = a; // { dg-error "lvalue" }
94     sink_4_1237(cva);          // { dg-error "no match" }
95     sink_4_1237(cv_source());  // { dg-error "no match" }
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 "lvalue" }
108           volatile A va;
109     const volatile A cva = a; // { dg-error "lvalue" }
110     sink_4_1238(cva);           // { dg-error "lvalue" }
111     return 0;
112 }
113
114 one   sink_4_1245(               A&);  // { dg-message "candidates" }
115 two   sink_4_1245(const          A&);  // { dg-message "note" }
116 four  sink_4_1245(const volatile A&);  // { dg-message "note" }
117 five  sink_4_1245(               A&&);  // { dg-message "note" }
118
119 int test4_1245()
120 {
121                    A a;
122     const          A ca = a; // { dg-error "lvalue" }
123           volatile A va;
124     const volatile A cva = a; // { dg-error "lvalue" }
125     sink_4_1245(v_source());   // { dg-error "no match" }
126     sink_4_1245(cv_source());  // { dg-error "no match" }
127     return 0;
128 }
129
130 one   sink_4_1246(               A&);  // { dg-message "candidates" }
131 two   sink_4_1246(const          A&);  // { dg-message "note" }
132 four  sink_4_1246(const volatile A&);  // { dg-message "note" }
133 six   sink_4_1246(const          A&&);  // { dg-message "note" }
134
135 int test4_1246()
136 {
137                    A a;
138     const          A ca = a; // { dg-error "lvalue" }
139           volatile A va;
140     const volatile A cva = a; // { dg-error "lvalue" }
141     sink_4_1246(v_source());   // { dg-error "no match" }
142     sink_4_1246(cv_source());  // { dg-error "no match" }
143     return 0;
144 }
145
146 one   sink_4_1247(               A&);  // { dg-message "candidates" }
147 two   sink_4_1247(const          A&);  // { dg-message "note" }
148 four  sink_4_1247(const volatile A&);  // { dg-message "note" }
149 seven sink_4_1247(volatile       A&&);  // { dg-message "note" }
150
151 int test4_1247()
152 {
153                    A a;
154     const          A ca = a; // { dg-error "lvalue" }
155           volatile A va;
156     const volatile A cva = a; // { dg-error "lvalue" }
157     sink_4_1247(cv_source());  // { dg-error "no match" }
158     return 0;
159 }
160
161 one   sink_4_1256(               A&);  // { dg-message "candidates" }
162 two   sink_4_1256(const          A&);  // { dg-message "note" }
163 five  sink_4_1256(               A&&);  // { dg-message "note" }
164 six   sink_4_1256(const          A&&);  // { dg-message "note" }
165
166 int test4_1256()
167 {
168                    A a;
169     const          A ca = a; // { dg-error "lvalue" }
170           volatile A va;
171     const volatile A cva = a; // { dg-error "lvalue" }
172     sink_4_1256(va);           // { dg-error "no match" }
173     sink_4_1256(cva);          // { dg-error "no match" }
174     sink_4_1256(v_source());   // { dg-error "no match" }
175     sink_4_1256(cv_source());  // { dg-error "no match" }
176     return 0;
177 }
178
179 one   sink_4_1257(               A&);  // { dg-message "candidates" }
180 two   sink_4_1257(const          A&);  // { dg-message "note" }
181 five  sink_4_1257(               A&&);  // { dg-message "note" }
182 seven sink_4_1257(volatile       A&&);  // { dg-message "" }
183
184 int test4_1257()
185 {
186                    A a;
187     const          A ca = a; // { dg-error "lvalue" }
188           volatile A va;
189     const volatile A cva = a; // { dg-error "lvalue" }
190     sink_4_1257(va);            // { dg-error "lvalue" }
191     sink_4_1257(cva);          // { dg-error "no match" }
192     sink_4_1257(cv_source());  // { dg-error "no match" }
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 "lvalue" }
205           volatile A va;
206     const volatile A cva = a; // { dg-error "lvalue" }
207     sink_4_1258(va);            // { dg-error "lvalue" }
208     sink_4_1258(cva);           // { dg-error "lvalue" }
209     return 0;
210 }
211
212 one   sink_4_1267(               A&);  // { dg-message "candidates" }
213 two   sink_4_1267(const          A&);  // { dg-message "note" }
214 six   sink_4_1267(const          A&&);  // { dg-message "note" }
215 seven sink_4_1267(volatile       A&&);  // { dg-message "" }
216
217 int test4_1267()
218 {
219                    A a;
220     const          A ca = a; // { dg-error "lvalue" }
221           volatile A va;
222     const volatile A cva = a; // { dg-error "lvalue" }
223     sink_4_1267(va);            // { dg-error "lvalue" }
224     sink_4_1267(cva);          // { dg-error "no match" }
225     sink_4_1267(source());     // { dg-error "ambiguous" }
226     sink_4_1267(cv_source());  // { dg-error "no match" }
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 "lvalue" }
239           volatile A va;
240     const volatile A cva = a; // { dg-error "lvalue" }
241     sink_4_1268(va);            // { dg-error "lvalue" }
242     sink_4_1268(cva);           // { dg-error "lvalue" }
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 "lvalue" }
255           volatile A va;
256     const volatile A cva = a; // { dg-error "lvalue" }
257     sink_4_1278(va);            // { dg-error "lvalue" }
258     sink_4_1278(cva);           // { dg-error "lvalue" }
259     return 0;
260 }
261
262 one   sink_4_1345(               A&);  // { dg-message "candidates" }
263 three sink_4_1345(volatile       A&);  // { dg-message "note" }
264 four  sink_4_1345(const volatile A&);  // { dg-message "note" }
265 five  sink_4_1345(               A&&);  // { dg-message "note" }
266
267 int test4_1345()
268 {
269                    A a;
270     const          A ca = a; // { dg-error "lvalue" }
271           volatile A va;
272     const volatile A cva = a; // { dg-error "lvalue" }
273     sink_4_1345(c_source());   // { dg-error "no match" }
274     sink_4_1345(v_source());   // { dg-error "no match" }
275     sink_4_1345(cv_source());  // { dg-error "no match" }
276     return 0;
277 }
278
279 one   sink_4_1346(               A&);  // { dg-message "candidates" }
280 three sink_4_1346(volatile       A&);  // { dg-message "note" }
281 four  sink_4_1346(const volatile A&);  // { dg-message "note" }
282 six   sink_4_1346(const          A&&);  // { dg-message "note" }
283
284 int test4_1346()
285 {
286                    A a;
287     const          A ca = a; // { dg-error "lvalue" }
288           volatile A va;
289     const volatile A cva = a; // { dg-error "lvalue" }
290     sink_4_1346(v_source());   // { dg-error "no match" }
291     sink_4_1346(cv_source());  // { dg-error "no match" }
292     return 0;
293 }
294
295 one   sink_4_1347(               A&);  // { dg-message "candidates" }
296 three sink_4_1347(volatile       A&);  // { dg-message "note" }
297 four  sink_4_1347(const volatile A&);  // { dg-message "note" }
298 seven sink_4_1347(volatile       A&&);  // { dg-message "note" }
299
300 int test4_1347()
301 {
302                    A a;
303     const          A ca = a; // { dg-error "lvalue" }
304           volatile A va;
305     const volatile A cva = a; // { dg-error "lvalue" }
306     sink_4_1347(c_source());   // { dg-error "no match" }
307     sink_4_1347(cv_source());  // { dg-error "no match" }
308     return 0;
309 }
310
311 one   sink_4_1356(               A&);  // { dg-message "candidates" }
312 three sink_4_1356(volatile       A&);  // { dg-message "note" }
313 five  sink_4_1356(               A&&);  // { dg-message "note" }
314 six   sink_4_1356(const          A&&);  // { dg-message "" }
315
316 int test4_1356()
317 {
318                    A a;
319     const          A ca = a; // { dg-error "lvalue" }
320           volatile A va;
321     const volatile A cva = a; // { dg-error "lvalue" }
322     sink_4_1356(ca);            // { dg-error "lvalue" }
323     sink_4_1356(cva);          // { dg-error "no match" }
324     sink_4_1356(v_source());   // { dg-error "no match" }
325     sink_4_1356(cv_source());  // { dg-error "no match" }
326     return 0;
327 }
328
329 one   sink_4_1357(               A&);  // { dg-message "candidates" }
330 three sink_4_1357(volatile       A&);  // { dg-message "note" }
331 five  sink_4_1357(               A&&);  // { dg-message "note" }
332 seven sink_4_1357(volatile       A&&);  // { dg-message "note" }
333
334 int test4_1357()
335 {
336                    A a;
337     const          A ca = a; // { dg-error "lvalue" }
338           volatile A va;
339     const volatile A cva = a; // { dg-error "lvalue" }
340     sink_4_1357(ca);           // { dg-error "no match" }
341     sink_4_1357(cva);          // { dg-error "no match" }
342     sink_4_1357(c_source());   // { dg-error "no match" }
343     sink_4_1357(cv_source());  // { dg-error "no match" }
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 "lvalue" }
356           volatile A va;
357     const volatile A cva = a; // { dg-error "lvalue" }
358     sink_4_1358(ca);            // { dg-error "lvalue" }
359     sink_4_1358(cva);           // { dg-error "lvalue" }
360     return 0;
361 }
362
363 one   sink_4_1367(               A&);  // { dg-message "candidates" }
364 three sink_4_1367(volatile       A&);  // { dg-message "note" }
365 six   sink_4_1367(const          A&&);  // { dg-message "" }
366 seven sink_4_1367(volatile       A&&);  // { dg-message "note" }
367
368 int test4_1367()
369 {
370                    A a;
371     const          A ca = a; // { dg-error "lvalue" }
372           volatile A va;
373     const volatile A cva = a; // { dg-error "lvalue" }
374     sink_4_1367(ca);            // { dg-error "lvalue" }
375     sink_4_1367(cva);          // { dg-error "no match" }
376     sink_4_1367(source());     // { dg-error "ambiguous" }
377     sink_4_1367(cv_source());  // { dg-error "no match" }
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 "lvalue" }
390           volatile A va;
391     const volatile A cva = a; // { dg-error "lvalue" }
392     sink_4_1368(ca);            // { dg-error "lvalue" }
393     sink_4_1368(cva);           // { dg-error "lvalue" }
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 "lvalue" }
406           volatile A va;
407     const volatile A cva = a; // { dg-error "lvalue" }
408     sink_4_1378(ca);            // { dg-error "lvalue" }
409     sink_4_1378(cva);           // { dg-error "lvalue" }
410     return 0;
411 }
412
413 one   sink_4_1456(               A&);  // { dg-message "candidates" }
414 four  sink_4_1456(const volatile A&);  // { dg-message "note" }
415 five  sink_4_1456(               A&&);  // { dg-message "note" }
416 six   sink_4_1456(const          A&&);  // { dg-message "note" }
417
418 int test4_1456()
419 {
420                    A a;
421     const          A ca = a; // { dg-error "lvalue" }
422           volatile A va;
423     const volatile A cva = a; // { dg-error "lvalue" }
424     sink_4_1456(v_source());   // { dg-error "no match" }
425     sink_4_1456(cv_source());  // { dg-error "no match" }
426     return 0;
427 }
428
429 one   sink_4_1457(               A&);  // { dg-message "candidates" }
430 four  sink_4_1457(const volatile A&);  // { dg-message "note" }
431 five  sink_4_1457(               A&&);  // { dg-message "note" }
432 seven sink_4_1457(volatile       A&&);  // { dg-message "note" }
433
434 int test4_1457()
435 {
436                    A a;
437     const          A ca = a; // { dg-error "lvalue" }
438           volatile A va;
439     const volatile A cva = a; // { dg-error "lvalue" }
440     sink_4_1457(c_source());   // { dg-error "no match" }
441     sink_4_1457(cv_source());  // { dg-error "no match" }
442     return 0;
443 }
444
445 one   sink_4_1467(               A&);  // { dg-message "candidates" }
446 four  sink_4_1467(const volatile A&);  // { dg-message "note" }
447 six   sink_4_1467(const          A&&);  // { dg-message "note" }
448 seven sink_4_1467(volatile       A&&);  // { dg-message "note" }
449
450 int test4_1467()
451 {
452                    A a;
453     const          A ca = a; // { dg-error "lvalue" }
454           volatile A va;
455     const volatile A cva = a; // { dg-error "lvalue" }
456     sink_4_1467(source());     // { dg-error "ambiguous" }
457     sink_4_1467(cv_source());  // { dg-error "no match" }
458     return 0;
459 }
460
461 one   sink_4_1567(               A&);  // { dg-message "candidates" }
462 five  sink_4_1567(               A&&);  // { dg-message "note" }
463 six   sink_4_1567(const          A&&);  // { dg-message "" }
464 seven sink_4_1567(volatile       A&&);  // { dg-message "" }
465
466 int test4_1567()
467 {
468                    A a;
469     const          A ca = a; // { dg-error "lvalue" }
470           volatile A va;
471     const volatile A cva = a; // { dg-error "lvalue" }
472     sink_4_1567(ca);           // { dg-error "lvalue" }
473     sink_4_1567(va);           // { dg-error "lvalue" }
474     sink_4_1567(cva);          // { dg-error "no match" }
475     sink_4_1567(cv_source());  // { dg-error "no match" }
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 "lvalue" }
488           volatile A va;
489     const volatile A cva = a; // { dg-error "lvalue" }
490     sink_4_1568(ca);            // { dg-error "lvalue" }
491     sink_4_1568(va);            // { dg-error "lvalue" }
492     sink_4_1568(cva);           // { dg-error "lvalue" }
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 "lvalue" }
505           volatile A va;
506     const volatile A cva = a; // { dg-error "lvalue" }
507     sink_4_1578(ca);            // { dg-error "lvalue" }
508     sink_4_1578(va);            // { dg-error "lvalue" }
509     sink_4_1578(cva);           // { dg-error "lvalue" }
510     return 0;
511 }
512
513 one   sink_4_1678(               A&);
514 six   sink_4_1678(const          A&&);  // { dg-message "" }
515 seven sink_4_1678(volatile       A&&);  // { dg-message "" }
516 eight sink_4_1678(const volatile A&&);  // { dg-message "" }
517
518 int test4_1678()
519 {
520                    A a;
521     const          A ca = a; // { dg-error "lvalue" }
522           volatile A va;
523     const volatile A cva = a; // { dg-error "lvalue" }
524     sink_4_1678(ca);            // { dg-error "lvalue" }
525     sink_4_1678(va);            // { dg-error "lvalue" }
526     sink_4_1678(cva);           // { dg-error "lvalue" }
527     sink_4_1678(source());  // { dg-error "ambiguous" }
528     return 0;
529 }
530
531 two   sink_4_2345(const          A&);  // { dg-message "candidates" }
532 three sink_4_2345(volatile       A&);  // { dg-message "note" }
533 four  sink_4_2345(const volatile A&);  // { dg-message "note" }
534 five  sink_4_2345(               A&&);  // { dg-message "note" }
535
536 int test4_2345()
537 {
538                    A a;
539     const          A ca = a; // { dg-error "lvalue" }
540           volatile A va;
541     const volatile A cva = a; // { dg-error "lvalue" }
542     sink_4_2345(a);            // { dg-error "ambiguous" }
543     sink_4_2345(v_source());   // { dg-error "no match" }
544     sink_4_2345(cv_source());  // { dg-error "no match" }
545     return 0;
546 }
547
548 two   sink_4_2346(const          A&);  // { dg-message "candidates" }
549 three sink_4_2346(volatile       A&);  // { dg-message "note" }
550 four  sink_4_2346(const volatile A&);  // { dg-message "note" }
551 six   sink_4_2346(const          A&&);  // { dg-message "note" }
552
553 int test4_2346()
554 {
555                    A a;
556     const          A ca = a; // { dg-error "lvalue" }
557           volatile A va;
558     const volatile A cva = a; // { dg-error "lvalue" }
559     sink_4_2346(a);            // { dg-error "ambiguous" }
560     sink_4_2346(v_source());   // { dg-error "no match" }
561     sink_4_2346(cv_source());  // { dg-error "no match" }
562     return 0;
563 }
564
565 two   sink_4_2347(const          A&);  // { dg-message "candidates" }
566 three sink_4_2347(volatile       A&);  // { dg-message "note" }
567 four  sink_4_2347(const volatile A&);  // { dg-message "note" }
568 seven sink_4_2347(volatile       A&&);  // { dg-message "note" }
569
570 int test4_2347()
571 {
572                    A a;
573     const          A ca = a; // { dg-error "lvalue" }
574           volatile A va;
575     const volatile A cva = a; // { dg-error "lvalue" }
576     sink_4_2347(a);            // { dg-error "ambiguous" }
577     sink_4_2347(cv_source());  // { dg-error "no match" }
578     return 0;
579 }
580
581 two   sink_4_2348(const          A&);  // { dg-message "candidates" }
582 three sink_4_2348(volatile       A&);  // { dg-message "note" }
583 four  sink_4_2348(const volatile A&);  // { dg-message "note" }
584 eight sink_4_2348(const volatile A&&);  // { dg-message "note" }
585
586 int test4_2348()
587 {
588                    A a;
589     const          A ca = a; // { dg-error "lvalue" }
590           volatile A va;
591     const volatile A cva = a; // { dg-error "lvalue" }
592     sink_4_2348(a);  // { dg-error "ambiguous" }
593     return 0;
594 }
595
596 two   sink_4_2356(const          A&);  // { dg-message "candidates" }
597 three sink_4_2356(volatile       A&);  // { dg-message "note" }
598 five  sink_4_2356(               A&&);  // { dg-message "note" }
599 six   sink_4_2356(const          A&&);  // { dg-message "note" }
600
601 int test4_2356()
602 {
603                    A a;
604     const          A ca = a; // { dg-error "lvalue" }
605           volatile A va;
606     const volatile A cva = a; // { dg-error "lvalue" }
607     sink_4_2356(a);            // { dg-error "ambiguous" }
608     sink_4_2356(cva);          // { dg-error "no match" }
609     sink_4_2356(v_source());   // { dg-error "no match" }
610     sink_4_2356(cv_source());  // { dg-error "no match" }
611     return 0;
612 }
613
614 two   sink_4_2357(const          A&);  // { dg-message "candidates" }
615 three sink_4_2357(volatile       A&);  // { dg-message "note" }
616 five  sink_4_2357(               A&&);  // { dg-message "note" }
617 seven sink_4_2357(volatile       A&&);  // { dg-message "note" }
618
619 int test4_2357()
620 {
621                    A a;
622     const          A ca = a; // { dg-error "lvalue" }
623           volatile A va;
624     const volatile A cva = a; // { dg-error "lvalue" }
625     sink_4_2357(a);            // { dg-error "ambiguous" }
626     sink_4_2357(cva);          // { dg-error "no match" }
627     sink_4_2357(cv_source());  // { dg-error "no match" }
628     return 0;
629 }
630
631 two   sink_4_2358(const          A&);  // { dg-message "candidates" }
632 three sink_4_2358(volatile       A&);  // { dg-message "note" }
633 five  sink_4_2358(               A&&);  // { dg-message "note" }
634 eight sink_4_2358(const volatile A&&);  // { dg-message "" }
635
636 int test4_2358()
637 {
638                    A a;
639     const          A ca = a; // { dg-error "lvalue" }
640           volatile A va;
641     const volatile A cva = a; // { dg-error "lvalue" }
642     sink_4_2358(a);  // { dg-error "ambiguous" }
643     sink_4_2358(cva); // { dg-error "lvalue" }
644     return 0;
645 }
646
647 two   sink_4_2367(const          A&);  // { dg-message "candidates" }
648 three sink_4_2367(volatile       A&);  // { dg-message "note" }
649 six   sink_4_2367(const          A&&);  // { dg-message "note" }
650 seven sink_4_2367(volatile       A&&);  // { dg-message "note" }
651
652 int test4_2367()
653 {
654                    A a;
655     const          A ca = a; // { dg-error "lvalue" }
656           volatile A va;
657     const volatile A cva = a; // { dg-error "lvalue" }
658     sink_4_2367(a);            // { dg-error "ambiguous" }
659     sink_4_2367(cva);          // { dg-error "no match" }
660     sink_4_2367(source());     // { dg-error "ambiguous" }
661     sink_4_2367(cv_source());  // { dg-error "no match" }
662     return 0;
663 }
664
665 two   sink_4_2368(const          A&);  // { dg-message "candidates" }
666 three sink_4_2368(volatile       A&);  // { dg-message "note" }
667 six   sink_4_2368(const          A&&);  // { dg-message "note" }
668 eight sink_4_2368(const volatile A&&);  // { dg-message "" }
669
670 int test4_2368()
671 {
672                    A a;
673     const          A ca = a; // { dg-error "lvalue" }
674           volatile A va;
675     const volatile A cva = a; // { dg-error "lvalue" }
676     sink_4_2368(a);  // { dg-error "ambiguous" }
677     sink_4_2368(cva); // { dg-error "lvalue" }
678     return 0;
679 }
680
681 two   sink_4_2378(const          A&);  // { dg-message "candidates" }
682 three sink_4_2378(volatile       A&);  // { dg-message "note" }
683 seven sink_4_2378(volatile       A&&);  // { dg-message "note" }
684 eight sink_4_2378(const volatile A&&);  // { dg-message "" }
685
686 int test4_2378()
687 {
688                    A a;
689     const          A ca = a; // { dg-error "lvalue" }
690           volatile A va;
691     const volatile A cva = a; // { dg-error "lvalue" }
692     sink_4_2378(a);  // { dg-error "ambiguous" }
693     sink_4_2378(cva); // { dg-error "lvalue" }
694     return 0;
695 }
696
697 two   sink_4_2456(const          A&);  // { dg-message "candidates" }
698 four  sink_4_2456(const volatile A&);  // { dg-message "note" }
699 five  sink_4_2456(               A&&);  // { dg-message "note" }
700 six   sink_4_2456(const          A&&);  // { dg-message "note" }
701
702 int test4_2456()
703 {
704                    A a;
705     const          A ca = a; // { dg-error "lvalue" }
706           volatile A va;
707     const volatile A cva = a; // { dg-error "lvalue" }
708     sink_4_2456(v_source());   // { dg-error "no match" }
709     sink_4_2456(cv_source());  // { dg-error "no match" }
710     return 0;
711 }
712
713 two   sink_4_2457(const          A&);  // { dg-message "candidates" }
714 four  sink_4_2457(const volatile A&);  // { dg-message "note" }
715 five  sink_4_2457(               A&&);  // { dg-message "note" }
716 seven sink_4_2457(volatile       A&&);  // { dg-message "note" }
717
718 int test4_2457()
719 {
720                    A a;
721     const          A ca = a; // { dg-error "lvalue" }
722           volatile A va;
723     const volatile A cva = a; // { dg-error "lvalue" }
724     sink_4_2457(cv_source());  // { dg-error "no match" }
725     return 0;
726 }
727
728 two   sink_4_2467(const          A&);  // { dg-message "candidates" }
729 four  sink_4_2467(const volatile A&);  // { dg-message "note" }
730 six   sink_4_2467(const          A&&);  // { dg-message "note" }
731 seven sink_4_2467(volatile       A&&);  // { dg-message "note" }
732
733 int test4_2467()
734 {
735                    A a;
736     const          A ca = a; // { dg-error "lvalue" }
737           volatile A va;
738     const volatile A cva = a; // { dg-error "lvalue" }
739     sink_4_2467(source());     // { dg-error "ambiguous" }
740     sink_4_2467(cv_source());  // { dg-error "no match" }
741     return 0;
742 }
743
744 two   sink_4_2567(const          A&);  // { dg-message "candidates" }
745 five  sink_4_2567(               A&&);  // { dg-message "note" }
746 six   sink_4_2567(const          A&&);  // { dg-message "note" }
747 seven sink_4_2567(volatile       A&&);  // { dg-message "" }
748
749 int test4_2567()
750 {
751                    A a;
752     const          A ca = a; // { dg-error "lvalue" }
753           volatile A va;
754     const volatile A cva = a; // { dg-error "lvalue" }
755     sink_4_2567(va);            // { dg-error "lvalue" }
756     sink_4_2567(cva);          // { dg-error "no match" }
757     sink_4_2567(cv_source());  // { dg-error "no match" }
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 "lvalue" }
770           volatile A va;
771     const volatile A cva = a; // { dg-error "lvalue" }
772     sink_4_2568(va); // { dg-error "lvalue" }
773     sink_4_2568(cva); // { dg-error "lvalue" }
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 "lvalue" }
786           volatile A va;
787     const volatile A cva = a; // { dg-error "lvalue" }
788     sink_4_2578(va); // { dg-error "lvalue" }
789     sink_4_2578(cva); // { dg-error "lvalue" }
790     return 0;
791 }
792
793 two   sink_4_2678(const          A&);  // { dg-message "candidates" }
794 six   sink_4_2678(const          A&&);  // { dg-message "note" }
795 seven sink_4_2678(volatile       A&&);  // { dg-message "" }
796 eight sink_4_2678(const volatile A&&);  // { dg-message "" }
797
798 int test4_2678()
799 {
800                    A a;
801     const          A ca = a; // { dg-error "lvalue" }
802           volatile A va;
803     const volatile A cva = a; // { dg-error "lvalue" }
804     sink_4_2678(va); // { dg-error "lvalue" }
805     sink_4_2678(cva); // { dg-error "lvalue" }
806     sink_4_2678(source());  // { dg-error "ambiguous" }
807     return 0;
808 }
809
810 three sink_4_3456(volatile       A&);  // { dg-message "candidates" }
811 four  sink_4_3456(const volatile A&);  // { dg-message "note" }
812 five  sink_4_3456(               A&&);  // { dg-message "note" }
813 six   sink_4_3456(const          A&&);  // { dg-message "note" }
814
815 int test4_3456()
816 {
817                    A a;
818     const          A ca = a; // { dg-error "lvalue" }
819           volatile A va;
820     const volatile A cva = a; // { dg-error "lvalue" }
821     sink_4_3456(v_source());   // { dg-error "no match" }
822     sink_4_3456(cv_source());  // { dg-error "no match" }
823     return 0;
824 }
825
826 three sink_4_3457(volatile       A&);  // { dg-message "candidates" }
827 four  sink_4_3457(const volatile A&);  // { dg-message "note" }
828 five  sink_4_3457(               A&&);  // { dg-message "note" }
829 seven sink_4_3457(volatile       A&&);  // { dg-message "note" }
830
831 int test4_3457()
832 {
833                    A a;
834     const          A ca = a; // { dg-error "lvalue" }
835           volatile A va;
836     const volatile A cva = a; // { dg-error "lvalue" }
837     sink_4_3457(c_source());   // { dg-error "no match" }
838     sink_4_3457(cv_source());  // { dg-error "no match" }
839     return 0;
840 }
841
842 three sink_4_3467(volatile       A&);  // { dg-message "candidates" }
843 four  sink_4_3467(const volatile A&);  // { dg-message "note" }
844 six   sink_4_3467(const          A&&);  // { dg-message "note" }
845 seven sink_4_3467(volatile       A&&);  // { dg-message "note" }
846
847 int test4_3467()
848 {
849                    A a;
850     const          A ca = a; // { dg-error "lvalue" }
851           volatile A va;
852     const volatile A cva = a; // { dg-error "lvalue" }
853     sink_4_3467(source());     // { dg-error "ambiguous" }
854     sink_4_3467(cv_source());  // { dg-error "no match" }
855     return 0;
856 }
857
858 three sink_4_3567(volatile       A&);  // { dg-message "candidates" }
859 five  sink_4_3567(               A&&);  // { dg-message "note" }
860 six   sink_4_3567(const          A&&);  // { dg-message "" }
861 seven sink_4_3567(volatile       A&&);  // { dg-message "note" }
862
863 int test4_3567()
864 {
865                    A a;
866     const          A ca = a; // { dg-error "lvalue" }
867           volatile A va;
868     const volatile A cva = a; // { dg-error "lvalue" }
869     sink_4_3567(ca);            // { dg-error "lvalue" }
870     sink_4_3567(cva);          // { dg-error "no match" }
871     sink_4_3567(cv_source());  // { dg-error "no match" }
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 "lvalue" }
884           volatile A va;
885     const volatile A cva = a; // { dg-error "lvalue" }
886     sink_4_3568(ca); // { dg-error "lvalue" }
887     sink_4_3568(cva); // { dg-error "lvalue" }
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 "lvalue" }
900           volatile A va;
901     const volatile A cva = a; // { dg-error "lvalue" }
902     sink_4_3578(ca); // { dg-error "lvalue" }
903     sink_4_3578(cva); // { dg-error "lvalue" }
904     return 0;
905 }
906
907 three sink_4_3678(volatile       A&);
908 six   sink_4_3678(const          A&&);  // { dg-message "" }
909 seven sink_4_3678(volatile       A&&);  // { dg-message "note" }
910 eight sink_4_3678(const volatile A&&);  // { dg-message "" }
911
912 int test4_3678()
913 {
914                    A a;
915     const          A ca = a; // { dg-error "lvalue" }
916           volatile A va;
917     const volatile A cva = a; // { dg-error "lvalue" }
918     sink_4_3678(ca);            // { dg-error "lvalue" }
919     sink_4_3678(cva);           // { dg-error "lvalue" }
920     sink_4_3678(source());  // { dg-error "ambiguous" }
921     return 0;
922 }
923
924 four  sink_4_4567(const volatile A&);  // { dg-message "candidates" }
925 five  sink_4_4567(               A&&);  // { dg-message "note" }
926 six   sink_4_4567(const          A&&);  // { dg-message "note" }
927 seven sink_4_4567(volatile       A&&);  // { dg-message "note" }
928
929 int test4_4567()
930 {
931                    A a;
932     const          A ca = a; // { dg-error "lvalue" }
933           volatile A va;
934     const volatile A cva = a; // { dg-error "lvalue" }
935     sink_4_4567(cv_source());  // { dg-error "no match" }
936     return 0;
937 }
938
939 four  sink_4_4678(const volatile A&);
940 six   sink_4_4678(const          A&&);  // { dg-message "candidates" }
941 seven sink_4_4678(volatile       A&&);  // { dg-message "note" }
942 eight sink_4_4678(const volatile A&&);  // { dg-message "note" }
943
944 int test4_4678()
945 {
946                    A a;
947     const          A ca = a; // { dg-error "lvalue" }
948           volatile A va;
949     const volatile A cva = a; // { dg-error "lvalue" }
950     sink_4_4678(source());  // { dg-error "ambiguous" }
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 "lvalue" }
963           volatile A va;
964     const volatile A cva = a; // { dg-error "lvalue" }
965     sink_4_5678(a);             // { dg-error "lvalue" }
966     sink_4_5678(ca);            // { dg-error "lvalue" }
967     sink_4_5678(va);            // { dg-error "lvalue" }
968     sink_4_5678(cva);           // { dg-error "lvalue" }
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 }