OSDN Git Service

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