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&&);
24 };
25 
26                A    source();
27 const          A  c_source();
28       volatile A  v_source();
29 const volatile A cv_source();
30 
31 // 3 at a time
32 
33 one   sink_3_123(               A&);  // { dg-message "one sink_3_123|no known conversion" }
34 two   sink_3_123(const          A&);  // { dg-message "two sink_3_123|no known conversion" }
35 three sink_3_123(volatile       A&);  // { dg-message "three sink_3_123|no known conversion" }
36 
37 int test3_123()
38 {
39                    A a;
40     const          A ca = a; // { dg-error "deleted" }
41           volatile A va;
42     const volatile A cva = a; // { dg-error "deleted" }
43     sink_3_123(cva);          // { dg-error "no match" }
44     // { dg-message "candidate" "candidate note" { target *-*-* } 43 }
45     sink_3_123(v_source());   // { dg-error "no match" }
46     // { dg-message "candidate" "candidate note" { target *-*-* } 45 }
47     sink_3_123(cv_source());  // { dg-error "no match" }
48     // { dg-message "candidate" "candidate note" { target *-*-* } 47 }
49     return 0;
50 }
51 
52 one   sink_3_125(               A&);  // { dg-message "one sink_3_125|no known conversion" }
53 two   sink_3_125(const          A&);  // { dg-message "two sink_3_125|no known conversion" }
54 five  sink_3_125(               A&&);  // { dg-message "five sink_3_125|no known conversion" }
55 
56 one   sink_3_124(               A&);  // { dg-message "one sink_3_124|no known conversion" }
57 two   sink_3_124(const          A&);  // { dg-message "two sink_3_124|no known conversion" }
58 four  sink_3_124(const volatile A&);  // { dg-message "four sink_3_124|no known conversion" }
59 
60 int test3_124()
61 {
62                    A a;
63     const          A ca = a; // { dg-error "deleted" }
64           volatile A va;
65     const volatile A cva = a; // { dg-error "deleted" }
66     sink_3_124(v_source());   // { dg-error "no match" }
67     // { dg-message "candidate" "candidate note" { target *-*-* } 66 }
68     sink_3_124(cv_source());  // { dg-error "no match" }
69     // { dg-message "candidate" "candidate note" { target *-*-* } 68 }
70     return 0;
71 }
72 
73 int test3_125()
74 {
75                    A a;
76     const          A ca = a; // { dg-error "deleted" }
77           volatile A va;
78     const volatile A cva = a; // { dg-error "deleted" }
79     sink_3_125(va);           // { dg-error "no match" }
80     // { dg-message "candidate" "candidate note" { target *-*-* } 79 }
81     sink_3_125(cva);          // { dg-error "no match" }
82     // { dg-message "candidate" "candidate note" { target *-*-* } 81 }
83     sink_3_125(v_source());   // { dg-error "no match" }
84     // { dg-message "candidate" "candidate note" { target *-*-* } 83 }
85     sink_3_125(cv_source());  // { dg-error "no match" }
86     // { dg-message "candidate" "candidate note" { target *-*-* } 85 }
87     return 0;
88 }
89 
90 one   sink_3_126(               A&);  // { dg-message "one sink_3_126|no known conversion" }
91 two   sink_3_126(const          A&);  // { dg-message "two sink_3_126|no known conversion" }
92 six   sink_3_126(const          A&&);  // { dg-message "six sink_3_126|no known conversion" }
93 
94 int test3_126()
95 {
96                    A a;
97     const          A ca = a; // { dg-error "deleted" }
98           volatile A va;
99     const volatile A cva = a; // { dg-error "deleted" }
100     sink_3_126(va);           // { dg-error "no match" }
101     // { dg-message "candidate" "candidate note" { target *-*-* } 100 }
102     sink_3_126(cva);          // { dg-error "no match" }
103     // { dg-message "candidate" "candidate note" { target *-*-* } 102 }
104     sink_3_126(v_source());   // { dg-error "no match" }
105     // { dg-message "candidate" "candidate note" { target *-*-* } 104 }
106     sink_3_126(cv_source());  // { dg-error "no match" }
107     // { dg-message "candidate" "candidate note" { target *-*-* } 106 }
108     return 0;
109 }
110 
111 one   sink_3_127(               A&);  // { dg-message "one sink_3_127|no known conversion" }
112 two   sink_3_127(const          A&);  // { dg-message "two sink_3_127|no known conversion" }
113 seven sink_3_127(volatile       A&&);  // { dg-message "seven sink_3_127|no known conversion" }
114 
115 int test3_127()
116 {
117                    A a;
118     const          A ca = a; // { dg-error "deleted" }
119           volatile A va;
120     const volatile A cva = a; // { dg-error "deleted" }
121     sink_3_127(va);		// { dg-error "lvalue" }
122     sink_3_127(cva);          // { dg-error "no match" }
123     // { dg-message "candidate" "candidate note" { target *-*-* } 122 }
124     sink_3_127(cv_source());  // { dg-error "no match" }
125     // { dg-message "candidate" "candidate note" { target *-*-* } 124 }
126     return 0;
127 }
128 
129 one   sink_3_128(               A&);
130 two   sink_3_128(const          A&);
131 eight sink_3_128(const volatile A&&); // { dg-message "" }
132 
133 int test3_128()
134 {
135                    A a;
136     const          A ca = a; // { dg-error "deleted" }
137           volatile A va;
138     const volatile A cva = a; // { dg-error "deleted" }
139 
140     sink_3_128(va);		// { dg-error "lvalue" }
141     sink_3_128(cva);		// { dg-error "lvalue" }
142 }
143 
144 one   sink_3_134(               A&);  // { dg-message "one sink_3_134|no known conversion" }
145 three sink_3_134(volatile       A&);  // { dg-message "three sink_3_134|no known conversion" }
146 four  sink_3_134(const volatile A&);  // { dg-message "four sink_3_134|no known conversion" }
147 
148 int test3_134()
149 {
150                    A a;
151     const          A ca = a; // { dg-error "deleted" }
152           volatile A va;
153     const volatile A cva = a; // { dg-error "deleted" }
154     sink_3_134(source());     // { dg-error "no match" }
155     // { dg-message "candidate" "candidate note" { target *-*-* } 154 }
156     sink_3_134(c_source());   // { dg-error "no match" }
157     // { dg-message "candidate" "candidate note" { target *-*-* } 156 }
158     sink_3_134(v_source());   // { dg-error "no match" }
159     // { dg-message "candidate" "candidate note" { target *-*-* } 158 }
160     sink_3_134(cv_source());  // { dg-error "no match" }
161     // { dg-message "candidate" "candidate note" { target *-*-* } 160 }
162     return 0;
163 }
164 
165 one   sink_3_135(               A&);  // { dg-message "one sink_3_135|no known conversion" }
166 three sink_3_135(volatile       A&);  // { dg-message "three sink_3_135|no known conversion" }
167 five  sink_3_135(               A&&);  // { dg-message "five sink_3_135|no known conversion" }
168 
169 int test3_135()
170 {
171                    A a;
172     const          A ca = a; // { dg-error "deleted" }
173           volatile A va;
174     const volatile A cva = a; // { dg-error "deleted" }
175     sink_3_135(ca);           // { dg-error "no match" }
176     // { dg-message "candidate" "candidate note" { target *-*-* } 175 }
177     sink_3_135(cva);          // { dg-error "no match" }
178     // { dg-message "candidate" "candidate note" { target *-*-* } 177 }
179     sink_3_135(c_source());   // { dg-error "no match" }
180     // { dg-message "candidate" "candidate note" { target *-*-* } 179 }
181     sink_3_135(v_source());   // { dg-error "no match" }
182     // { dg-message "candidate" "candidate note" { target *-*-* } 181 }
183     sink_3_135(cv_source());  // { dg-error "no match" }
184     // { dg-message "candidate" "candidate note" { target *-*-* } 183 }
185     return 0;
186 }
187 
188 one   sink_3_136(               A&);  // { dg-message "one sink_3_136|no known conversion" }
189 three sink_3_136(volatile       A&);  // { dg-message "note" }
190 six   sink_3_136(const          A&&);  // { dg-message "" }
191 
192 int test3_136()
193 {
194                    A a;
195     const          A ca = a; // { dg-error "deleted" }
196           volatile A va;
197     const volatile A cva = a; // { dg-error "deleted" }
198     sink_3_136(ca);		// { dg-error "lvalue" }
199     sink_3_136(cva);          // { dg-error "no match" }
200     // { dg-message "candidate" "candidate note" { target *-*-* } 199 }
201     sink_3_136(v_source());   // { dg-error "no match" }
202     // { dg-message "candidate" "candidate note" { target *-*-* } 201 }
203     sink_3_136(cv_source());  // { dg-error "no match" }
204     // { dg-message "candidate" "candidate note" { target *-*-* } 203 }
205     return 0;
206 }
207 
208 one   sink_3_137(               A&);  // { dg-message "one sink_3_137|no known conversion" }
209 three sink_3_137(volatile       A&);  // { dg-message "note" }
210 seven sink_3_137(volatile       A&&);  // { dg-message "note" }
211 
212 int test3_137()
213 {
214                    A a;
215     const          A ca = a; // { dg-error "deleted" }
216           volatile A va;
217     const volatile A cva = a; // { dg-error "deleted" }
218     sink_3_137(ca);           // { dg-error "no match" }
219     // { dg-message "candidate" "candidate note" { target *-*-* } 218 }
220     sink_3_137(cva);          // { dg-error "no match" }
221     // { dg-message "candidate" "candidate note" { target *-*-* } 220 }
222     sink_3_137(c_source());   // { dg-error "no match" }
223     // { dg-message "candidate" "candidate note" { target *-*-* } 222 }
224     sink_3_137(cv_source());  // { dg-error "no match" }
225     // { dg-message "candidate" "candidate note" { target *-*-* } 224 }
226     return 0;
227 }
228 
229 one   sink_3_138(               A&);
230 three sink_3_138(volatile       A&);
231 eight sink_3_138(const volatile A&&); // { dg-message "" }
232 
233 int test3_138()
234 {
235                    A a;
236     const          A ca = a; // { dg-error "deleted" }
237           volatile A va;
238     const volatile A cva = a; // { dg-error "deleted" }
239     sink_3_138(ca);		// { dg-error "lvalue" }
240     sink_3_138(cva);		// { dg-error "lvalue" }
241     return 0;
242 }
243 
244 one   sink_3_145(               A&);  // { dg-message "one sink_3_145|no known conversion" }
245 four  sink_3_145(const volatile A&);  // { dg-message "note" }
246 five  sink_3_145(               A&&);  // { dg-message "note" }
247 
248 int test3_145()
249 {
250                    A a;
251     const          A ca = a; // { dg-error "deleted" }
252           volatile A va;
253     const volatile A cva = a; // { dg-error "deleted" }
254     sink_3_145(c_source());   // { dg-error "no match" }
255     // { dg-message "candidate" "candidate note" { target *-*-* } 254 }
256     sink_3_145(v_source());   // { dg-error "no match" }
257     // { dg-message "candidate" "candidate note" { target *-*-* } 256 }
258     sink_3_145(cv_source());  // { dg-error "no match" }
259     // { dg-message "candidate" "candidate note" { target *-*-* } 258 }
260     return 0;
261 }
262 
263 one   sink_3_146(               A&);  // { dg-message "one sink_3_146|no known conversion" }
264 four  sink_3_146(const volatile A&);  // { dg-message "note" }
265 six   sink_3_146(const          A&&);  // { dg-message "note" }
266 
267 int test3_146()
268 {
269                    A a;
270     const          A ca = a; // { dg-error "deleted" }
271           volatile A va;
272     const volatile A cva = a; // { dg-error "deleted" }
273     sink_3_146(v_source());   // { dg-error "no match" }
274     // { dg-message "candidate" "candidate note" { target *-*-* } 273 }
275     sink_3_146(cv_source());  // { dg-error "no match" }
276     // { dg-message "candidate" "candidate note" { target *-*-* } 275 }
277     return 0;
278 }
279 
280 one   sink_3_147(               A&);  // { dg-message "one sink_3_147|no known conversion" }
281 four  sink_3_147(const volatile A&);  // { dg-message "note" }
282 seven sink_3_147(volatile       A&&);  // { dg-message "note" }
283 
284 int test3_147()
285 {
286                    A a;
287     const          A ca = a; // { dg-error "deleted" }
288           volatile A va;
289     const volatile A cva = a; // { dg-error "deleted" }
290     sink_3_147(c_source());   // { dg-error "no match" }
291     // { dg-message "candidate" "candidate note" { target *-*-* } 290 }
292     sink_3_147(cv_source());  // { dg-error "no match" }
293     // { dg-message "candidate" "candidate note" { target *-*-* } 292 }
294     return 0;
295 }
296 
297 one   sink_3_156(               A&);  // { dg-message "one sink_3_156|no known conversion" }
298 five  sink_3_156(               A&&);  // { dg-message "note" }
299 six   sink_3_156(const          A&&);  // { dg-message "" }
300 
301 int test3_156()
302 {
303                    A a;
304     const          A ca = a; // { dg-error "deleted" }
305           volatile A va;
306     const volatile A cva = a; // { dg-error "deleted" }
307     sink_3_156(ca);		// { dg-error "lvalue" }
308     sink_3_156(va);           // { dg-error "no match" }
309     // { dg-message "candidate" "candidate note" { target *-*-* } 308 }
310     sink_3_156(cva);          // { dg-error "no match" }
311     // { dg-message "candidate" "candidate note" { target *-*-* } 310 }
312     sink_3_156(v_source());   // { dg-error "no match" }
313     // { dg-message "candidate" "candidate note" { target *-*-* } 312 }
314     sink_3_156(cv_source());  // { dg-error "no match" }
315     // { dg-message "candidate" "candidate note" { target *-*-* } 314 }
316     return 0;
317 }
318 
319 one   sink_3_157(               A&);  // { dg-message "one sink_3_157|no known conversion" }
320 five  sink_3_157(               A&&);  // { dg-message "note" }
321 seven sink_3_157(volatile       A&&);  // { dg-message "" }
322 
323 int test3_157()
324 {
325                    A a;
326     const          A ca = a; // { dg-error "deleted" }
327           volatile A va;
328     const volatile A cva = a; // { dg-error "deleted" }
329     sink_3_157(ca);           // { dg-error "no match" }
330     // { dg-message "candidate" "candidate note" { target *-*-* } 329 }
331     sink_3_157(va);	      // { dg-error "lvalue" }
332     sink_3_157(cva);          // { dg-error "no match" }
333     // { dg-message "candidate" "candidate note" { target *-*-* } 332 }
334     sink_3_157(c_source());   // { dg-error "no match" }
335     // { dg-message "candidate" "candidate note" { target *-*-* } 334 }
336     sink_3_157(cv_source());  // { dg-error "no match" }
337     // { dg-message "candidate" "candidate note" { target *-*-* } 336 }
338     return 0;
339 }
340 
341 one   sink_3_158(               A&);
342 five  sink_3_158(               A&&);
343 eight sink_3_158(const volatile A&&); // { dg-message "" }
344 
345 int test3_158()
346 {
347                    A a;
348     const          A ca = a; // { dg-error "deleted" }
349           volatile A va;
350     const volatile A cva = a; // { dg-error "deleted" }
351     sink_3_158(ca);		// { dg-error "lvalue" }
352     sink_3_158(va);		// { dg-error "lvalue" }
353     sink_3_158(cva);		// { dg-error "lvalue" }
354     return 0;
355 }
356 
357 one   sink_3_167(               A&);  // { dg-message "one sink_3_167|no known conversion" }
358 six   sink_3_167(const          A&&);  // { dg-message "" }
359 seven sink_3_167(volatile       A&&);  // { dg-message "" }
360 
361 int test3_167()
362 {
363                    A a;
364     const          A ca = a; // { dg-error "deleted" }
365           volatile A va;
366     const volatile A cva = a; // { dg-error "deleted" }
367     sink_3_167(ca);		// { dg-error "lvalue" }
368     sink_3_167(va);		// { dg-error "lvalue" }
369     sink_3_167(cva);          // { dg-error "no match" }
370     // { dg-message "candidate" "candidate note" { target *-*-* } 369 }
371     sink_3_167(source());     // { dg-error "ambiguous" }
372     // { dg-message "candidate" "candidate note" { target *-*-* } 371 }
373     sink_3_167(cv_source());  // { dg-error "no match" }
374     // { dg-message "candidate" "candidate note" { target *-*-* } 373 }
375     return 0;
376 }
377 
378 one   sink_3_168(               A&);
379 six   sink_3_168(const          A&&); // { dg-message "" }
380 eight sink_3_168(const volatile A&&); // { dg-message "" }
381 
382 int test3_168()
383 {
384                    A a;
385     const          A ca = a; // { dg-error "deleted" }
386           volatile A va;
387     const volatile A cva = a; // { dg-error "deleted" }
388     sink_3_168(ca);		// { dg-error "lvalue" }
389     sink_3_168(va);		// { dg-error "lvalue" }
390     sink_3_168(cva);		// { dg-error "lvalue" }
391     return 0;
392 }
393 
394 one   sink_3_178(               A&);
395 seven sink_3_178(volatile       A&&); // { dg-message "" }
396 eight sink_3_178(const volatile A&&); // { dg-message "" }
397 
398 int test3_178()
399 {
400                    A a;
401     const          A ca = a; // { dg-error "deleted" }
402           volatile A va;
403     const volatile A cva = a; // { dg-error "deleted" }
404     sink_3_178(ca);		// { dg-error "lvalue" }
405     sink_3_178(va);		// { dg-error "lvalue" }
406     sink_3_178(cva);		// { dg-error "lvalue" }
407     return 0;
408 }
409 
410 two   sink_3_234(const          A&);  // { dg-message "two sink_3_234|no known conversion" }
411 three sink_3_234(volatile       A&);  // { dg-message "note" }
412 four  sink_3_234(const volatile A&);  // { dg-message "note" }
413 
414 int test3_234()
415 {
416                    A a;
417     const          A ca = a; // { dg-error "deleted" }
418           volatile A va;
419     const volatile A cva = a; // { dg-error "deleted" }
420     sink_3_234(a);            // { dg-error "ambiguous" }
421     // { dg-message "candidate" "candidate note" { target *-*-* } 420 }
422     sink_3_234(v_source());   // { dg-error "no match" }
423     // { dg-message "candidate" "candidate note" { target *-*-* } 422 }
424     sink_3_234(cv_source());  // { dg-error "no match" }
425     // { dg-message "candidate" "candidate note" { target *-*-* } 424 }
426     return 0;
427 }
428 
429 two   sink_3_235(const          A&);  // { dg-message "two sink_3_235|no known conversion" }
430 three sink_3_235(volatile       A&);  // { dg-message "note" }
431 five  sink_3_235(               A&&);  // { dg-message "note" }
432 
433 int test3_235()
434 {
435                    A a;
436     const          A ca = a; // { dg-error "deleted" }
437           volatile A va;
438     const volatile A cva = a; // { dg-error "deleted" }
439     sink_3_235(a);            // { dg-error "ambiguous" }
440     // { dg-message "candidate" "candidate note" { target *-*-* } 439 }
441     sink_3_235(cva);          // { dg-error "no match" }
442     // { dg-message "candidate" "candidate note" { target *-*-* } 441 }
443     sink_3_235(v_source());   // { dg-error "no match" }
444     // { dg-message "candidate" "candidate note" { target *-*-* } 443 }
445     sink_3_235(cv_source());  // { dg-error "no match" }
446     // { dg-message "candidate" "candidate note" { target *-*-* } 445 }
447     return 0;
448 }
449 
450 two   sink_3_236(const          A&);  // { dg-message "two sink_3_236|no known conversion" }
451 three sink_3_236(volatile       A&);  // { dg-message "note" }
452 six   sink_3_236(const          A&&);  // { dg-message "note" }
453 
454 int test3_236()
455 {
456                    A a;
457     const          A ca = a; // { dg-error "deleted" }
458           volatile A va;
459     const volatile A cva = a; // { dg-error "deleted" }
460     sink_3_236(a);            // { dg-error "ambiguous" }
461     // { dg-message "candidate" "candidate note" { target *-*-* } 460 }
462     sink_3_236(cva);          // { dg-error "no match" }
463     // { dg-message "candidate" "candidate note" { target *-*-* } 462 }
464     sink_3_236(v_source());   // { dg-error "no match" }
465     // { dg-message "candidate" "candidate note" { target *-*-* } 464 }
466     sink_3_236(cv_source());  // { dg-error "no match" }
467     // { dg-message "candidate" "candidate note" { target *-*-* } 466 }
468     return 0;
469 }
470 
471 two   sink_3_237(const          A&);  // { dg-message "two sink_3_237|no known conversion" }
472 three sink_3_237(volatile       A&);  // { dg-message "note" }
473 seven sink_3_237(volatile       A&&);  // { dg-message "note" }
474 
475 int test3_237()
476 {
477                    A a;
478     const          A ca = a; // { dg-error "deleted" }
479           volatile A va;
480     const volatile A cva = a; // { dg-error "deleted" }
481     sink_3_237(a);            // { dg-error "ambiguous" }
482     // { dg-message "candidate" "candidate note" { target *-*-* } 481 }
483     sink_3_237(cva);          // { dg-error "no match" }
484     // { dg-message "candidate" "candidate note" { target *-*-* } 483 }
485     sink_3_237(cv_source());  // { dg-error "no match" }
486     // { dg-message "candidate" "candidate note" { target *-*-* } 485 }
487     return 0;
488 }
489 
490 two   sink_3_238(const          A&);  // { dg-message "two sink_3_238|no known conversion" }
491 three sink_3_238(volatile       A&);  // { dg-message "three sink_3_238|no known conversion" }
492 eight sink_3_238(const volatile A&&);  // { dg-message "eight sink_3_238|no known conversion" }
493 
494 int test3_238()
495 {
496                    A a;
497     const          A ca = a; // { dg-error "deleted" }
498           volatile A va;
499     const volatile A cva = a; // { dg-error "deleted" }
500     sink_3_238(a);  // { dg-error "ambiguous" }
501     // { dg-message "candidate" "candidate note" { target *-*-* } 500 }
502     sink_3_238(cva); // { dg-error "lvalue" }
503     return 0;
504 }
505 
506 two   sink_3_245(const          A&);  // { dg-message "two sink_3_245|no known conversion" }
507 four  sink_3_245(const volatile A&);  // { dg-message "four sink_3_245|no known conversion" }
508 five  sink_3_245(               A&&);  // { dg-message "five sink_3_245|no known conversion" }
509 
510 int test3_245()
511 {
512                    A a;
513     const          A ca = a; // { dg-error "deleted" }
514           volatile A va;
515     const volatile A cva = a; // { dg-error "deleted" }
516     sink_3_245(v_source());   // { dg-error "no match" }
517     // { dg-message "candidate" "candidate note" { target *-*-* } 516 }
518     sink_3_245(cv_source());  // { dg-error "no match" }
519     // { dg-message "candidate" "candidate note" { target *-*-* } 518 }
520     return 0;
521 }
522 
523 two   sink_3_246(const          A&);  // { dg-message "two sink_3_246|no known conversion" }
524 four  sink_3_246(const volatile A&);  // { dg-message "four sink_3_246|no known conversion" }
525 six   sink_3_246(const          A&&);  // { dg-message "six sink_3_246|no known conversion" }
526 
527 int test3_246()
528 {
529                    A a;
530     const          A ca = a; // { dg-error "deleted" }
531           volatile A va;
532     const volatile A cva = a; // { dg-error "deleted" }
533     sink_3_246(v_source());   // { dg-error "no match" }
534     // { dg-message "candidate" "candidate note" { target *-*-* } 533 }
535     sink_3_246(cv_source());  // { dg-error "no match" }
536     // { dg-message "candidate" "candidate note" { target *-*-* } 535 }
537     return 0;
538 }
539 
540 two   sink_3_247(const          A&);  // { dg-message "two sink_3_247|no known conversion" }
541 four  sink_3_247(const volatile A&);  // { dg-message "four sink_3_247|no known conversion" }
542 seven sink_3_247(volatile       A&&);  // { dg-message "seven sink_3_247|no known conversion" }
543 
544 int test3_247()
545 {
546                    A a;
547     const          A ca = a; // { dg-error "deleted" }
548           volatile A va;
549     const volatile A cva = a; // { dg-error "deleted" }
550     sink_3_247(cv_source());  // { dg-error "no match" }
551     // { dg-message "candidate" "candidate note" { target *-*-* } 550 }
552     return 0;
553 }
554 
555 two   sink_3_256(const          A&);  // { dg-message "two sink_3_256|no known conversion" }
556 five  sink_3_256(               A&&);  // { dg-message "five sink_3_256|no known conversion" }
557 six   sink_3_256(const          A&&);  // { dg-message "six sink_3_256|no known conversion" }
558 
559 int test3_256()
560 {
561                    A a;
562     const          A ca = a; // { dg-error "deleted" }
563           volatile A va;
564     const volatile A cva = a; // { dg-error "deleted" }
565     sink_3_256(va);           // { dg-error "no match" }
566     // { dg-message "candidate" "candidate note" { target *-*-* } 565 }
567     sink_3_256(cva);          // { dg-error "no match" }
568     // { dg-message "candidate" "candidate note" { target *-*-* } 567 }
569     sink_3_256(v_source());   // { dg-error "no match" }
570     // { dg-message "candidate" "candidate note" { target *-*-* } 569 }
571     sink_3_256(cv_source());  // { dg-error "no match" }
572     // { dg-message "candidate" "candidate note" { target *-*-* } 571 }
573     return 0;
574 }
575 
576 two   sink_3_257(const          A&);  // { dg-message "two sink_3_257|no known conversion" }
577 five  sink_3_257(               A&&);  // { dg-message "five sink_3_257|no known conversion" }
578 seven sink_3_257(volatile       A&&);  // { dg-message "seven sink_3_257|no known conversion" }
579 
580 int test3_257()
581 {
582                    A a;
583     const          A ca = a; // { dg-error "deleted" }
584           volatile A va;
585     const volatile A cva = a; // { dg-error "deleted" }
586     sink_3_257(va);		// { dg-error "lvalue" }
587     sink_3_257(cva);          // { dg-error "no match" }
588     // { dg-message "candidate" "candidate note" { target *-*-* } 587 }
589     sink_3_257(cv_source());  // { dg-error "no match" }
590     // { dg-message "candidate" "candidate note" { target *-*-* } 589 }
591     return 0;
592 }
593 
594 two   sink_3_258(const          A&);
595 five  sink_3_258(               A&&);
596 eight sink_3_258(const volatile A&&); // { dg-message "" }
597 
598 int test3_258()
599 {
600                    A a;
601     const          A ca = a; // { dg-error "deleted" }
602           volatile A va;
603     const volatile A cva = a; // { dg-error "deleted" }
604     sink_3_258(va);		// { dg-error "lvalue" }
605     sink_3_258(cva);		// { dg-error "lvalue" }
606     return 0;
607 }
608 
609 two   sink_3_267(const          A&);  // { dg-message "two sink_3_267|no known conversion" }
610 six   sink_3_267(const          A&&);  // { dg-message "six sink_3_267|no known conversion" }
611 seven sink_3_267(volatile       A&&);  // { dg-message "seven sink_3_267|no known conversion" }
612 
613 int test3_267()
614 {
615                    A a;
616     const          A ca = a; // { dg-error "deleted" }
617           volatile A va;
618     const volatile A cva = a; // { dg-error "deleted" }
619     sink_3_267(va);		// { dg-error "lvalue" }
620     sink_3_267(cva);          // { dg-error "no match" }
621     // { dg-message "candidate" "candidate note" { target *-*-* } 620 }
622     sink_3_267(source());     // { dg-error "ambiguous" }
623     // { dg-message "candidate" "candidate note" { target *-*-* } 622 }
624     sink_3_267(cv_source());  // { dg-error "no match" }
625     // { dg-message "candidate" "candidate note" { target *-*-* } 624 }
626     return 0;
627 }
628 
629 two   sink_3_268(const          A&);
630 six   sink_3_268(const          A&&);
631 eight sink_3_268(const volatile A&&); // { dg-message "" }
632 
633 int test3_268()
634 {
635                    A a;
636     const          A ca = a; // { dg-error "deleted" }
637           volatile A va;
638     const volatile A cva = a; // { dg-error "deleted" }
639     sink_3_268(va);		// { dg-error "lvalue" }
640     sink_3_268(cva);		// { dg-error "lvalue" }
641     return 0;
642 }
643 
644 two   sink_3_278(const          A&);
645 seven sink_3_278(volatile       A&&); // { dg-message "" }
646 eight sink_3_278(const volatile A&&); // { dg-message "" }
647 
648 int test3_278()
649 {
650                    A a;
651     const          A ca = a; // { dg-error "deleted" }
652           volatile A va;
653     const volatile A cva = a; // { dg-error "deleted" }
654     sink_3_278(va);		// { dg-error "lvalue" }
655     sink_3_278(cva);		// { dg-error "lvalue" }
656     return 0;
657 }
658 
659 three sink_3_345(volatile       A&);  // { dg-message "three sink_3_345|no known conversion" }
660 four  sink_3_345(const volatile A&);  // { dg-message "four sink_3_345|no known conversion" }
661 five  sink_3_345(               A&&);  // { dg-message "five sink_3_345|no known conversion" }
662 
663 int test3_345()
664 {
665                    A a;
666     const          A ca = a; // { dg-error "deleted" }
667           volatile A va;
668     const volatile A cva = a; // { dg-error "deleted" }
669     sink_3_345(c_source());   // { dg-error "no match" }
670     // { dg-message "candidate" "candidate note" { target *-*-* } 669 }
671     sink_3_345(v_source());   // { dg-error "no match" }
672     // { dg-message "candidate" "candidate note" { target *-*-* } 671 }
673     sink_3_345(cv_source());  // { dg-error "no match" }
674     // { dg-message "candidate" "candidate note" { target *-*-* } 673 }
675     return 0;
676 }
677 
678 three sink_3_346(volatile       A&);  // { dg-message "three sink_3_346|no known conversion" }
679 four  sink_3_346(const volatile A&);  // { dg-message "four sink_3_346|no known conversion" }
680 six   sink_3_346(const          A&&);  // { dg-message "six sink_3_346|no known conversion" }
681 
682 int test3_346()
683 {
684                    A a;
685     const          A ca = a; // { dg-error "deleted" }
686           volatile A va;
687     const volatile A cva = a; // { dg-error "deleted" }
688     sink_3_346(v_source());   // { dg-error "no match" }
689     // { dg-message "candidate" "candidate note" { target *-*-* } 688 }
690     sink_3_346(cv_source());  // { dg-error "no match" }
691     // { dg-message "candidate" "candidate note" { target *-*-* } 690 }
692     return 0;
693 }
694 
695 three sink_3_347(volatile       A&);  // { dg-message "three sink_3_347|no known conversion" }
696 four  sink_3_347(const volatile A&);  // { dg-message "four sink_3_347|no known conversion" }
697 seven sink_3_347(volatile       A&&);  // { dg-message "seven sink_3_347|no known conversion" }
698 
699 int test3_347()
700 {
701                    A a;
702     const          A ca = a; // { dg-error "deleted" }
703           volatile A va;
704     const volatile A cva = a; // { dg-error "deleted" }
705     sink_3_347(c_source());   // { dg-error "no match" }
706     // { dg-message "candidate" "candidate note" { target *-*-* } 705 }
707     sink_3_347(cv_source());  // { dg-error "no match" }
708     // { dg-message "candidate" "candidate note" { target *-*-* } 707 }
709     return 0;
710 }
711 
712 three sink_3_356(volatile       A&);  // { dg-message "three sink_3_356|no known conversion" }
713 five  sink_3_356(               A&&);  // { dg-message "five sink_3_356|no known conversion" }
714 six   sink_3_356(const          A&&);  // { dg-message "six sink_3_356|no known conversion" }
715 
716 int test3_356()
717 {
718                    A a;
719     const          A ca = a; // { dg-error "deleted" }
720           volatile A va;
721     const volatile A cva = a; // { dg-error "deleted" }
722     sink_3_356(ca);		// { dg-error "lvalue" }
723     sink_3_356(cva);          // { dg-error "no match" }
724     // { dg-message "candidate" "candidate note" { target *-*-* } 723 }
725     sink_3_356(v_source());   // { dg-error "no match" }
726     // { dg-message "candidate" "candidate note" { target *-*-* } 725 }
727     sink_3_356(cv_source());  // { dg-error "no match" }
728     // { dg-message "candidate" "candidate note" { target *-*-* } 727 }
729     return 0;
730 }
731 
732 three sink_3_357(volatile       A&);  // { dg-message "three sink_3_357|no known conversion" }
733 five  sink_3_357(               A&&);  // { dg-message "five sink_3_357|no known conversion" }
734 seven sink_3_357(volatile       A&&);  // { dg-message "seven sink_3_357|no known conversion" }
735 
736 int test3_357()
737 {
738                    A a;
739     const          A ca = a; // { dg-error "deleted" }
740           volatile A va;
741     const volatile A cva = a; // { dg-error "deleted" }
742     sink_3_357(ca);           // { dg-error "no match" }
743     // { dg-message "candidate" "candidate note" { target *-*-* } 742 }
744     sink_3_357(cva);          // { dg-error "no match" }
745     // { dg-message "candidate" "candidate note" { target *-*-* } 744 }
746     sink_3_357(c_source());   // { dg-error "no match" }
747     // { dg-message "candidate" "candidate note" { target *-*-* } 746 }
748     sink_3_357(cv_source());  // { dg-error "no match" }
749     // { dg-message "candidate" "candidate note" { target *-*-* } 748 }
750     return 0;
751 }
752 
753 three sink_3_358(volatile       A&);
754 five  sink_3_358(               A&&);
755 eight sink_3_358(const volatile A&&); // { dg-message "" }
756 
757 int test3_358()
758 {
759                    A a;
760     const          A ca = a; // { dg-error "deleted" }
761           volatile A va;
762     const volatile A cva = a; // { dg-error "deleted" }
763     sink_3_358(ca);		// { dg-error "lvalue" }
764     sink_3_358(cva);		// { dg-error "lvalue" }
765     return 0;
766 }
767 
768 three sink_3_367(volatile       A&);  // { dg-message "three sink_3_367|no known conversion" }
769 six   sink_3_367(const          A&&);  // { dg-message "six sink_3_367|no known conversion" }
770 seven sink_3_367(volatile       A&&);  // { dg-message "seven sink_3_367|no known conversion" }
771 
772 int test3_367()
773 {
774                    A a;
775     const          A ca = a; // { dg-error "deleted" }
776           volatile A va;
777     const volatile A cva = a; // { dg-error "deleted" }
778     sink_3_367(ca);		// { dg-error "lvalue" }
779     sink_3_367(cva);          // { dg-error "no match" }
780     // { dg-message "candidate" "candidate note" { target *-*-* } 779 }
781     sink_3_367(source());     // { dg-error "ambiguous" }
782     // { dg-message "candidate" "candidate note" { target *-*-* } 781 }
783     sink_3_367(cv_source());  // { dg-error "no match" }
784     // { dg-message "candidate" "candidate note" { target *-*-* } 783 }
785     return 0;
786 }
787 
788 three sink_3_368(volatile       A&);
789 six   sink_3_368(const          A&&); // { dg-message "" }
790 eight sink_3_368(const volatile A&&); // { dg-message "" }
791 
792 int test3_368()
793 {
794                    A a;
795     const          A ca = a; // { dg-error "deleted" }
796           volatile A va;
797     const volatile A cva = a; // { dg-error "deleted" }
798     sink_3_368(ca);		// { dg-error "lvalue" }
799     sink_3_368(cva);		// { dg-error "lvalue" }
800     return 0;
801 }
802 
803 three sink_3_378(volatile       A&);
804 seven sink_3_378(volatile       A&&);
805 eight sink_3_378(const volatile A&&); // { dg-message "" }
806 
807 int test3_378()
808 {
809                    A a;
810     const          A ca = a; // { dg-error "deleted" }
811           volatile A va;
812     const volatile A cva = a; // { dg-error "deleted" }
813     sink_3_378(ca);		// { dg-error "lvalue" }
814     sink_3_378(cva);		// { dg-error "lvalue" }
815     return 0;
816 }
817 
818 four  sink_3_456(const volatile A&);  // { dg-message "note" }
819 five  sink_3_456(               A&&);  // { dg-message "note" }
820 six   sink_3_456(const          A&&);  // { dg-message "note" }
821 
822 int test3_456()
823 {
824                    A a;
825     const          A ca = a; // { dg-error "deleted" }
826           volatile A va;
827     const volatile A cva = a; // { dg-error "deleted" }
828     sink_3_456(v_source());   // { dg-error "no match" }
829     // { dg-message "candidate" "candidate note" { target *-*-* } 828 }
830     sink_3_456(cv_source());  // { dg-error "no match" }
831     // { dg-message "candidate" "candidate note" { target *-*-* } 830 }
832     return 0;
833 }
834 
835 four  sink_3_457(const volatile A&);  // { dg-message "note" }
836 five  sink_3_457(               A&&);  // { dg-message "note" }
837 seven sink_3_457(volatile       A&&);  // { dg-message "note" }
838 
839 int test3_457()
840 {
841                    A a;
842     const          A ca = a; // { dg-error "deleted" }
843           volatile A va;
844     const volatile A cva = a; // { dg-error "deleted" }
845     sink_3_457(c_source());   // { dg-error "no match" }
846     // { dg-message "candidate" "candidate note" { target *-*-* } 845 }
847     sink_3_457(cv_source());  // { dg-error "no match" }
848     // { dg-message "candidate" "candidate note" { target *-*-* } 847 }
849     return 0;
850 }
851 
852 four  sink_3_467(const volatile A&);  // { dg-message "note" }
853 six   sink_3_467(const          A&&);  // { dg-message "note" }
854 seven sink_3_467(volatile       A&&);  // { dg-message "note" }
855 
856 int test3_467()
857 {
858                    A a;
859     const          A ca = a; // { dg-error "deleted" }
860           volatile A va;
861     const volatile A cva = a; // { dg-error "deleted" }
862     sink_3_467(source());     // { dg-error "ambiguous" }
863     // { dg-message "candidate" "candidate note" { target *-*-* } 862 }
864     sink_3_467(cv_source());  // { dg-error "no match" }
865     // { dg-message "candidate" "candidate note" { target *-*-* } 864 }
866     return 0;
867 }
868 
869 five  sink_3_567(               A&&);  // { dg-message "five sink_3_567|no known conversion" }
870 six   sink_3_567(const          A&&);  // { dg-message "six sink_3_567|no known conversion" }
871 seven sink_3_567(volatile       A&&);  // { dg-message "seven sink_3_567|no known conversion" }
872 
873 int test3_567()
874 {
875                    A a;
876     const          A ca = a; // { dg-error "deleted" }
877           volatile A va;
878     const volatile A cva = a; // { dg-error "deleted" }
879     sink_3_567(a);		// { dg-error "lvalue" }
880     sink_3_567(ca);		// { dg-error "lvalue" }
881     sink_3_567(va);		// { dg-error "lvalue" }
882     sink_3_567(cva);          // { dg-error "no match" }
883     // { dg-message "candidate" "candidate note" { target *-*-* } 882 }
884     sink_3_567(cv_source());  // { dg-error "no match" }
885     // { dg-message "candidate" "candidate note" { target *-*-* } 884 }
886     return 0;
887 }
888 
889 five  sink_3_568(               A&&); // { dg-message "" }
890 six   sink_3_568(const          A&&); // { dg-message "" }
891 eight sink_3_568(const volatile A&&); // { dg-message "" }
892 
893 int test3_568()
894 {
895                    A a;
896     const          A ca = a; // { dg-error "deleted" }
897           volatile A va;
898     const volatile A cva = a; // { dg-error "deleted" }
899     sink_3_568(a);		// { dg-error "lvalue" }
900     sink_3_568(ca);		// { dg-error "lvalue" }
901     sink_3_568(va);		// { dg-error "lvalue" }
902     sink_3_568(cva);		// { dg-error "lvalue" }
903     return 0;
904 }
905 
906 five  sink_3_578(               A&&); // { dg-message "" }
907 seven sink_3_578(volatile       A&&); // { dg-message "" }
908 eight sink_3_578(const volatile A&&); // { dg-message "" }
909 
910 int test3_578()
911 {
912                    A a;
913     const          A ca = a; // { dg-error "deleted" }
914           volatile A va;
915     const volatile A cva = a; // { dg-error "deleted" }
916     sink_3_578(a);		// { dg-error "lvalue" }
917     sink_3_578(ca);		// { dg-error "lvalue" }
918     sink_3_578(va);		// { dg-error "lvalue" }
919     sink_3_578(cva);		// { dg-error "lvalue" }
920     return 0;
921 }
922 
923 six   sink_3_678(const          A&&);  // { dg-message "six sink_3_678|no known conversion" }
924 seven sink_3_678(volatile       A&&);  // { dg-message "seven sink_3_678|no known conversion" }
925 eight sink_3_678(const volatile A&&);  // { dg-message "eight sink_3_678|no known conversion" }
926 
927 int test3_678()
928 {
929                    A a;
930     const          A ca = a; // { dg-error "deleted" }
931           volatile A va;
932     const volatile A cva = a; // { dg-error "deleted" }
933     sink_3_678(a);          // { dg-error "ambiguous" }
934     // { dg-message "candidate" "candidate note" { target *-*-* } 933 }
935     sink_3_678(ca);	    // { dg-error "lvalue" }
936     sink_3_678(va);	    // { dg-error "lvalue" }
937     sink_3_678(cva);	    // { dg-error "lvalue" }
938     sink_3_678(source());   // { dg-error "ambiguous" }
939     // { dg-message "candidate" "candidate note" { target *-*-* } 938 }
940     return 0;
941 }
942 
943 int main()
944 {
945     return test3_123() + test3_125() + test3_126() + test3_127() +
946            test3_135() + test3_136() + test3_137() + test3_156() +
947            test3_157() + test3_167() + test3_234() + test3_235() +
948            test3_236() + test3_237() + test3_238() + test3_256() +
949            test3_257() + test3_267() + test3_356() + test3_357() +
950            test3_367() + test3_467() + test3_567() + test3_678();
951 }
952