OSDN Git Service

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