OSDN Git Service

2008-03-01 Douglas Gregor <doug.gregor@gmail.com>
[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 overlaod resolution among referece 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&&);
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-error "" }
34 two   sink_4_1234(const          A&);  // { dg-error "" }
35 three sink_4_1234(volatile       A&);  // { dg-error "" }
36 four  sink_4_1234(const volatile A&);  // { dg-error "" }
37
38 int test4_1234()
39 {
40                    A a;
41     const          A ca = a;
42           volatile A va;
43     const volatile A cva = a;
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-error "" }
50 two   sink_4_1235(const          A&);  // { dg-error "" }
51 three sink_4_1235(volatile       A&);  // { dg-error "" }
52 five  sink_4_1235(               A&&);  // { dg-error "" }
53
54 int test4_1235()
55 {
56                    A a;
57     const          A ca = a;
58           volatile A va;
59     const volatile A cva = a;
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-error "" }
67 two   sink_4_1236(const          A&);  // { dg-error "" }
68 three sink_4_1236(volatile       A&);  // { dg-error "" }
69 six   sink_4_1236(const          A&&);  // { dg-error "" }
70
71 int test4_1236()
72 {
73                    A a;
74     const          A ca = a;
75           volatile A va;
76     const volatile A cva = a;
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-error "" }
84 two   sink_4_1237(const          A&);  // { dg-error "" }
85 three sink_4_1237(volatile       A&);  // { dg-error "" }
86 seven sink_4_1237(volatile       A&&);  // { dg-error "" }
87
88 int test4_1237()
89 {
90                    A a;
91     const          A ca = a;
92           volatile A va;
93     const volatile A cva = a;
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_1245(               A&);  // { dg-error "" }
100 two   sink_4_1245(const          A&);  // { dg-error "" }
101 four  sink_4_1245(const volatile A&);  // { dg-error "" }
102 five  sink_4_1245(               A&&);  // { dg-error "" }
103
104 int test4_1245()
105 {
106                    A a;
107     const          A ca = a;
108           volatile A va;
109     const volatile A cva = a;
110     sink_4_1245(v_source());   // { dg-error "no match" }
111     sink_4_1245(cv_source());  // { dg-error "no match" }
112     return 0;
113 }
114
115 one   sink_4_1246(               A&);  // { dg-error "" }
116 two   sink_4_1246(const          A&);  // { dg-error "" }
117 four  sink_4_1246(const volatile A&);  // { dg-error "" }
118 six   sink_4_1246(const          A&&);  // { dg-error "" }
119
120 int test4_1246()
121 {
122                    A a;
123     const          A ca = a;
124           volatile A va;
125     const volatile A cva = a;
126     sink_4_1246(v_source());   // { dg-error "no match" }
127     sink_4_1246(cv_source());  // { dg-error "no match" }
128     return 0;
129 }
130
131 one   sink_4_1247(               A&);  // { dg-error "" }
132 two   sink_4_1247(const          A&);  // { dg-error "" }
133 four  sink_4_1247(const volatile A&);  // { dg-error "" }
134 seven sink_4_1247(volatile       A&&);  // { dg-error "" }
135
136 int test4_1247()
137 {
138                    A a;
139     const          A ca = a;
140           volatile A va;
141     const volatile A cva = a;
142     sink_4_1247(cv_source());  // { dg-error "no match" }
143     return 0;
144 }
145
146 one   sink_4_1256(               A&);  // { dg-error "" }
147 two   sink_4_1256(const          A&);  // { dg-error "" }
148 five  sink_4_1256(               A&&);  // { dg-error "" }
149 six   sink_4_1256(const          A&&);  // { dg-error "" }
150
151 int test4_1256()
152 {
153                    A a;
154     const          A ca = a;
155           volatile A va;
156     const volatile A cva = a;
157     sink_4_1256(va);           // { dg-error "no match" }
158     sink_4_1256(cva);          // { dg-error "no match" }
159     sink_4_1256(v_source());   // { dg-error "no match" }
160     sink_4_1256(cv_source());  // { dg-error "no match" }
161     return 0;
162 }
163
164 one   sink_4_1257(               A&);  // { dg-error "" }
165 two   sink_4_1257(const          A&);  // { dg-error "" }
166 five  sink_4_1257(               A&&);  // { dg-error "" }
167 seven sink_4_1257(volatile       A&&);  // { dg-error "" }
168
169 int test4_1257()
170 {
171                    A a;
172     const          A ca = a;
173           volatile A va;
174     const volatile A cva = a;
175     sink_4_1257(cva);          // { dg-error "no match" }
176     sink_4_1257(cv_source());  // { dg-error "no match" }
177     return 0;
178 }
179
180 one   sink_4_1267(               A&);  // { dg-error "" }
181 two   sink_4_1267(const          A&);  // { dg-error "" }
182 six   sink_4_1267(const          A&&);  // { dg-error "" }
183 seven sink_4_1267(volatile       A&&);  // { dg-error "" }
184
185 int test4_1267()
186 {
187                    A a;
188     const          A ca = a;
189           volatile A va;
190     const volatile A cva = a;
191     sink_4_1267(cva);          // { dg-error "no match" }
192     sink_4_1267(source());     // { dg-error "ambiguous" }
193     sink_4_1267(cv_source());  // { dg-error "no match" }
194     return 0;
195 }
196
197 one   sink_4_1345(               A&);  // { dg-error "" }
198 three sink_4_1345(volatile       A&);  // { dg-error "" }
199 four  sink_4_1345(const volatile A&);  // { dg-error "" }
200 five  sink_4_1345(               A&&);  // { dg-error "" }
201
202 int test4_1345()
203 {
204                    A a;
205     const          A ca = a;
206           volatile A va;
207     const volatile A cva = a;
208     sink_4_1345(c_source());   // { dg-error "no match" }
209     sink_4_1345(v_source());   // { dg-error "no match" }
210     sink_4_1345(cv_source());  // { dg-error "no match" }
211     return 0;
212 }
213
214 one   sink_4_1346(               A&);  // { dg-error "" }
215 three sink_4_1346(volatile       A&);  // { dg-error "" }
216 four  sink_4_1346(const volatile A&);  // { dg-error "" }
217 six   sink_4_1346(const          A&&);  // { dg-error "" }
218
219 int test4_1346()
220 {
221                    A a;
222     const          A ca = a;
223           volatile A va;
224     const volatile A cva = a;
225     sink_4_1346(v_source());   // { dg-error "no match" }
226     sink_4_1346(cv_source());  // { dg-error "no match" }
227     return 0;
228 }
229
230 one   sink_4_1347(               A&);  // { dg-error "" }
231 three sink_4_1347(volatile       A&);  // { dg-error "" }
232 four  sink_4_1347(const volatile A&);  // { dg-error "" }
233 seven sink_4_1347(volatile       A&&);  // { dg-error "" }
234
235 int test4_1347()
236 {
237                    A a;
238     const          A ca = a;
239           volatile A va;
240     const volatile A cva = a;
241     sink_4_1347(c_source());   // { dg-error "no match" }
242     sink_4_1347(cv_source());  // { dg-error "no match" }
243     return 0;
244 }
245
246 one   sink_4_1356(               A&);  // { dg-error "" }
247 three sink_4_1356(volatile       A&);  // { dg-error "" }
248 five  sink_4_1356(               A&&);  // { dg-error "" }
249 six   sink_4_1356(const          A&&);  // { dg-error "" }
250
251 int test4_1356()
252 {
253                    A a;
254     const          A ca = a;
255           volatile A va;
256     const volatile A cva = a;
257     sink_4_1356(cva);          // { dg-error "no match" }
258     sink_4_1356(v_source());   // { dg-error "no match" }
259     sink_4_1356(cv_source());  // { dg-error "no match" }
260     return 0;
261 }
262
263 one   sink_4_1357(               A&);  // { dg-error "" }
264 three sink_4_1357(volatile       A&);  // { dg-error "" }
265 five  sink_4_1357(               A&&);  // { dg-error "" }
266 seven sink_4_1357(volatile       A&&);  // { dg-error "" }
267
268 int test4_1357()
269 {
270                    A a;
271     const          A ca = a;
272           volatile A va;
273     const volatile A cva = a;
274     sink_4_1357(ca);           // { dg-error "no match" }
275     sink_4_1357(cva);          // { dg-error "no match" }
276     sink_4_1357(c_source());   // { dg-error "no match" }
277     sink_4_1357(cv_source());  // { dg-error "no match" }
278     return 0;
279 }
280
281 one   sink_4_1367(               A&);  // { dg-error "" }
282 three sink_4_1367(volatile       A&);  // { dg-error "" }
283 six   sink_4_1367(const          A&&);  // { dg-error "" }
284 seven sink_4_1367(volatile       A&&);  // { dg-error "" }
285
286 int test4_1367()
287 {
288                    A a;
289     const          A ca = a;
290           volatile A va;
291     const volatile A cva = a;
292     sink_4_1367(cva);          // { dg-error "no match" }
293     sink_4_1367(source());     // { dg-error "ambiguous" }
294     sink_4_1367(cv_source());  // { dg-error "no match" }
295     return 0;
296 }
297
298 one   sink_4_1456(               A&);  // { dg-error "" }
299 four  sink_4_1456(const volatile A&);  // { dg-error "" }
300 five  sink_4_1456(               A&&);  // { dg-error "" }
301 six   sink_4_1456(const          A&&);  // { dg-error "" }
302
303 int test4_1456()
304 {
305                    A a;
306     const          A ca = a;
307           volatile A va;
308     const volatile A cva = a;
309     sink_4_1456(v_source());   // { dg-error "no match" }
310     sink_4_1456(cv_source());  // { dg-error "no match" }
311     return 0;
312 }
313
314 one   sink_4_1457(               A&);  // { dg-error "" }
315 four  sink_4_1457(const volatile A&);  // { dg-error "" }
316 five  sink_4_1457(               A&&);  // { dg-error "" }
317 seven sink_4_1457(volatile       A&&);  // { dg-error "" }
318
319 int test4_1457()
320 {
321                    A a;
322     const          A ca = a;
323           volatile A va;
324     const volatile A cva = a;
325     sink_4_1457(c_source());   // { dg-error "no match" }
326     sink_4_1457(cv_source());  // { dg-error "no match" }
327     return 0;
328 }
329
330 one   sink_4_1467(               A&);  // { dg-error "" }
331 four  sink_4_1467(const volatile A&);  // { dg-error "" }
332 six   sink_4_1467(const          A&&);  // { dg-error "" }
333 seven sink_4_1467(volatile       A&&);  // { dg-error "" }
334
335 int test4_1467()
336 {
337                    A a;
338     const          A ca = a;
339           volatile A va;
340     const volatile A cva = a;
341     sink_4_1467(source());     // { dg-error "ambiguous" }
342     sink_4_1467(cv_source());  // { dg-error "no match" }
343     return 0;
344 }
345
346 one   sink_4_1567(               A&);  // { dg-error "" }
347 five  sink_4_1567(               A&&);  // { dg-error "" }
348 six   sink_4_1567(const          A&&);  // { dg-error "" }
349 seven sink_4_1567(volatile       A&&);  // { dg-error "" }
350
351 int test4_1567()
352 {
353                    A a;
354     const          A ca = a;
355           volatile A va;
356     const volatile A cva = a;
357     sink_4_1567(cva);          // { dg-error "no match" }
358     sink_4_1567(cv_source());  // { dg-error "no match" }
359     return 0;
360 }
361
362 one   sink_4_1678(               A&);
363 six   sink_4_1678(const          A&&);  // { dg-error "" }
364 seven sink_4_1678(volatile       A&&);  // { dg-error "" }
365 eight sink_4_1678(const volatile A&&);  // { dg-error "" }
366
367 int test4_1678()
368 {
369                    A a;
370     const          A ca = a;
371           volatile A va;
372     const volatile A cva = a;
373     sink_4_1678(source());  // { dg-error "ambiguous" }
374     return 0;
375 }
376
377 two   sink_4_2345(const          A&);  // { dg-error "" }
378 three sink_4_2345(volatile       A&);  // { dg-error "" }
379 four  sink_4_2345(const volatile A&);  // { dg-error "" }
380 five  sink_4_2345(               A&&);  // { dg-error "" }
381
382 int test4_2345()
383 {
384                    A a;
385     const          A ca = a;
386           volatile A va;
387     const volatile A cva = a;
388     sink_4_2345(a);            // { dg-error "ambiguous" }
389     sink_4_2345(v_source());   // { dg-error "no match" }
390     sink_4_2345(cv_source());  // { dg-error "no match" }
391     return 0;
392 }
393
394 two   sink_4_2346(const          A&);  // { dg-error "" }
395 three sink_4_2346(volatile       A&);  // { dg-error "" }
396 four  sink_4_2346(const volatile A&);  // { dg-error "" }
397 six   sink_4_2346(const          A&&);  // { dg-error "" }
398
399 int test4_2346()
400 {
401                    A a;
402     const          A ca = a;
403           volatile A va;
404     const volatile A cva = a;
405     sink_4_2346(a);            // { dg-error "ambiguous" }
406     sink_4_2346(v_source());   // { dg-error "no match" }
407     sink_4_2346(cv_source());  // { dg-error "no match" }
408     return 0;
409 }
410
411 two   sink_4_2347(const          A&);  // { dg-error "" }
412 three sink_4_2347(volatile       A&);  // { dg-error "" }
413 four  sink_4_2347(const volatile A&);  // { dg-error "" }
414 seven sink_4_2347(volatile       A&&);  // { dg-error "" }
415
416 int test4_2347()
417 {
418                    A a;
419     const          A ca = a;
420           volatile A va;
421     const volatile A cva = a;
422     sink_4_2347(a);            // { dg-error "ambiguous" }
423     sink_4_2347(cv_source());  // { dg-error "no match" }
424     return 0;
425 }
426
427 two   sink_4_2348(const          A&);  // { dg-error "" }
428 three sink_4_2348(volatile       A&);  // { dg-error "" }
429 four  sink_4_2348(const volatile A&);  // { dg-error "" }
430 eight sink_4_2348(const volatile A&&);  // { dg-error "" }
431
432 int test4_2348()
433 {
434                    A a;
435     const          A ca = a;
436           volatile A va;
437     const volatile A cva = a;
438     sink_4_2348(a);  // { dg-error "ambiguous" }
439     return 0;
440 }
441
442 two   sink_4_2356(const          A&);  // { dg-error "" }
443 three sink_4_2356(volatile       A&);  // { dg-error "" }
444 five  sink_4_2356(               A&&);  // { dg-error "" }
445 six   sink_4_2356(const          A&&);  // { dg-error "" }
446
447 int test4_2356()
448 {
449                    A a;
450     const          A ca = a;
451           volatile A va;
452     const volatile A cva = a;
453     sink_4_2356(a);            // { dg-error "ambiguous" }
454     sink_4_2356(cva);          // { dg-error "no match" }
455     sink_4_2356(v_source());   // { dg-error "no match" }
456     sink_4_2356(cv_source());  // { dg-error "no match" }
457     return 0;
458 }
459
460 two   sink_4_2357(const          A&);  // { dg-error "" }
461 three sink_4_2357(volatile       A&);  // { dg-error "" }
462 five  sink_4_2357(               A&&);  // { dg-error "" }
463 seven sink_4_2357(volatile       A&&);  // { dg-error "" }
464
465 int test4_2357()
466 {
467                    A a;
468     const          A ca = a;
469           volatile A va;
470     const volatile A cva = a;
471     sink_4_2357(a);            // { dg-error "ambiguous" }
472     sink_4_2357(cva);          // { dg-error "no match" }
473     sink_4_2357(cv_source());  // { dg-error "no match" }
474     return 0;
475 }
476
477 two   sink_4_2358(const          A&);  // { dg-error "" }
478 three sink_4_2358(volatile       A&);  // { dg-error "" }
479 five  sink_4_2358(               A&&);  // { dg-error "" }
480 eight sink_4_2358(const volatile A&&);  // { dg-error "" }
481
482 int test4_2358()
483 {
484                    A a;
485     const          A ca = a;
486           volatile A va;
487     const volatile A cva = a;
488     sink_4_2358(a);  // { dg-error "ambiguous" }
489     return 0;
490 }
491
492 two   sink_4_2367(const          A&);  // { dg-error "" }
493 three sink_4_2367(volatile       A&);  // { dg-error "" }
494 six   sink_4_2367(const          A&&);  // { dg-error "" }
495 seven sink_4_2367(volatile       A&&);  // { dg-error "" }
496
497 int test4_2367()
498 {
499                    A a;
500     const          A ca = a;
501           volatile A va;
502     const volatile A cva = a;
503     sink_4_2367(a);            // { dg-error "ambiguous" }
504     sink_4_2367(cva);          // { dg-error "no match" }
505     sink_4_2367(source());     // { dg-error "ambiguous" }
506     sink_4_2367(cv_source());  // { dg-error "no match" }
507     return 0;
508 }
509
510 two   sink_4_2368(const          A&);  // { dg-error "" }
511 three sink_4_2368(volatile       A&);  // { dg-error "" }
512 six   sink_4_2368(const          A&&);  // { dg-error "" }
513 eight sink_4_2368(const volatile A&&);  // { dg-error "" }
514
515 int test4_2368()
516 {
517                    A a;
518     const          A ca = a;
519           volatile A va;
520     const volatile A cva = a;
521     sink_4_2368(a);  // { dg-error "ambiguous" }
522     return 0;
523 }
524
525 two   sink_4_2378(const          A&);  // { dg-error "" }
526 three sink_4_2378(volatile       A&);  // { dg-error "" }
527 seven sink_4_2378(volatile       A&&);  // { dg-error "" }
528 eight sink_4_2378(const volatile A&&);  // { dg-error "" }
529
530 int test4_2378()
531 {
532                    A a;
533     const          A ca = a;
534           volatile A va;
535     const volatile A cva = a;
536     sink_4_2378(a);  // { dg-error "ambiguous" }
537     return 0;
538 }
539
540 two   sink_4_2456(const          A&);  // { dg-error "" }
541 four  sink_4_2456(const volatile A&);  // { dg-error "" }
542 five  sink_4_2456(               A&&);  // { dg-error "" }
543 six   sink_4_2456(const          A&&);  // { dg-error "" }
544
545 int test4_2456()
546 {
547                    A a;
548     const          A ca = a;
549           volatile A va;
550     const volatile A cva = a;
551     sink_4_2456(v_source());   // { dg-error "no match" }
552     sink_4_2456(cv_source());  // { dg-error "no match" }
553     return 0;
554 }
555
556 two   sink_4_2457(const          A&);  // { dg-error "" }
557 four  sink_4_2457(const volatile A&);  // { dg-error "" }
558 five  sink_4_2457(               A&&);  // { dg-error "" }
559 seven sink_4_2457(volatile       A&&);  // { dg-error "" }
560
561 int test4_2457()
562 {
563                    A a;
564     const          A ca = a;
565           volatile A va;
566     const volatile A cva = a;
567     sink_4_2457(cv_source());  // { dg-error "no match" }
568     return 0;
569 }
570
571 two   sink_4_2467(const          A&);  // { dg-error "" }
572 four  sink_4_2467(const volatile A&);  // { dg-error "" }
573 six   sink_4_2467(const          A&&);  // { dg-error "" }
574 seven sink_4_2467(volatile       A&&);  // { dg-error "" }
575
576 int test4_2467()
577 {
578                    A a;
579     const          A ca = a;
580           volatile A va;
581     const volatile A cva = a;
582     sink_4_2467(source());     // { dg-error "ambiguous" }
583     sink_4_2467(cv_source());  // { dg-error "no match" }
584     return 0;
585 }
586
587 two   sink_4_2567(const          A&);  // { dg-error "" }
588 five  sink_4_2567(               A&&);  // { dg-error "" }
589 six   sink_4_2567(const          A&&);  // { dg-error "" }
590 seven sink_4_2567(volatile       A&&);  // { dg-error "" }
591
592 int test4_2567()
593 {
594                    A a;
595     const          A ca = a;
596           volatile A va;
597     const volatile A cva = a;
598     sink_4_2567(cva);          // { dg-error "no match" }
599     sink_4_2567(cv_source());  // { dg-error "no match" }
600     return 0;
601 }
602
603 two   sink_4_2678(const          A&);  // { dg-error "" }
604 six   sink_4_2678(const          A&&);  // { dg-error "" }
605 seven sink_4_2678(volatile       A&&);  // { dg-error "" }
606 eight sink_4_2678(const volatile A&&);  // { dg-error "" }
607
608 int test4_2678()
609 {
610                    A a;
611     const          A ca = a;
612           volatile A va;
613     const volatile A cva = a;
614     sink_4_2678(source());  // { dg-error "ambiguous" }
615     return 0;
616 }
617
618 three sink_4_3456(volatile       A&);  // { dg-error "" }
619 four  sink_4_3456(const volatile A&);  // { dg-error "" }
620 five  sink_4_3456(               A&&);  // { dg-error "" }
621 six   sink_4_3456(const          A&&);  // { dg-error "" }
622
623 int test4_3456()
624 {
625                    A a;
626     const          A ca = a;
627           volatile A va;
628     const volatile A cva = a;
629     sink_4_3456(v_source());   // { dg-error "no match" }
630     sink_4_3456(cv_source());  // { dg-error "no match" }
631     return 0;
632 }
633
634 three sink_4_3457(volatile       A&);  // { dg-error "" }
635 four  sink_4_3457(const volatile A&);  // { dg-error "" }
636 five  sink_4_3457(               A&&);  // { dg-error "" }
637 seven sink_4_3457(volatile       A&&);  // { dg-error "" }
638
639 int test4_3457()
640 {
641                    A a;
642     const          A ca = a;
643           volatile A va;
644     const volatile A cva = a;
645     sink_4_3457(c_source());   // { dg-error "no match" }
646     sink_4_3457(cv_source());  // { dg-error "no match" }
647     return 0;
648 }
649
650 three sink_4_3467(volatile       A&);  // { dg-error "" }
651 four  sink_4_3467(const volatile A&);  // { dg-error "" }
652 six   sink_4_3467(const          A&&);  // { dg-error "" }
653 seven sink_4_3467(volatile       A&&);  // { dg-error "" }
654
655 int test4_3467()
656 {
657                    A a;
658     const          A ca = a;
659           volatile A va;
660     const volatile A cva = a;
661     sink_4_3467(source());     // { dg-error "ambiguous" }
662     sink_4_3467(cv_source());  // { dg-error "no match" }
663     return 0;
664 }
665
666 three sink_4_3567(volatile       A&);  // { dg-error "" }
667 five  sink_4_3567(               A&&);  // { dg-error "" }
668 six   sink_4_3567(const          A&&);  // { dg-error "" }
669 seven sink_4_3567(volatile       A&&);  // { dg-error "" }
670
671 int test4_3567()
672 {
673                    A a;
674     const          A ca = a;
675           volatile A va;
676     const volatile A cva = a;
677     sink_4_3567(cva);          // { dg-error "no match" }
678     sink_4_3567(cv_source());  // { dg-error "no match" }
679     return 0;
680 }
681
682 three sink_4_3678(volatile       A&);
683 six   sink_4_3678(const          A&&);  // { dg-error "" }
684 seven sink_4_3678(volatile       A&&);  // { dg-error "" }
685 eight sink_4_3678(const volatile A&&);  // { dg-error "" }
686
687 int test4_3678()
688 {
689                    A a;
690     const          A ca = a;
691           volatile A va;
692     const volatile A cva = a;
693     sink_4_3678(source());  // { dg-error "ambiguous" }
694     return 0;
695 }
696
697 four  sink_4_4567(const volatile A&);  // { dg-error "" }
698 five  sink_4_4567(               A&&);  // { dg-error "" }
699 six   sink_4_4567(const          A&&);  // { dg-error "" }
700 seven sink_4_4567(volatile       A&&);  // { dg-error "" }
701
702 int test4_4567()
703 {
704                    A a;
705     const          A ca = a;
706           volatile A va;
707     const volatile A cva = a;
708     sink_4_4567(cv_source());  // { dg-error "no match" }
709     return 0;
710 }
711
712 four  sink_4_4678(const volatile A&);
713 six   sink_4_4678(const          A&&);  // { dg-error "" }
714 seven sink_4_4678(volatile       A&&);  // { dg-error "" }
715 eight sink_4_4678(const volatile A&&);  // { dg-error "" }
716
717 int test4_4678()
718 {
719                    A a;
720     const          A ca = a;
721           volatile A va;
722     const volatile A cva = a;
723     sink_4_4678(source());  // { dg-error "ambiguous" }
724     return 0;
725 }
726
727 int main()
728 {
729     return test4_1235() + test4_1236() + test4_1237() + test4_1256() + test4_1257() +
730            test4_1267() + test4_1356() + test4_1357() + test4_1467() + test4_1567() +
731            test4_1678() + test4_2345() + test4_2346() + test4_2347() + test4_2348() +
732            test4_2356() + test4_2357() + test4_2358() + test4_2367() + test4_2368() +
733            test4_2378() + test4_2467() + test4_2567() + test4_2678() + test4_3467() +
734            test4_3567() + test4_3678() + test4_4678();
735 }