1 // I, Howard Hinnant, hereby place this code in the public domain.
3 // Test overload resolution among reference types
5 // { dg-do compile { target c++11 } }
6 // { dg-options "-fno-ipa-icf" }
8 template <bool> struct sa;
9 template <> struct sa<true> {};
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];};
23 A(const volatile A&&);
28 volatile A v_source(); // { dg-warning "deprecated" "" { target c++2a } }
29 const volatile A cv_source(); // { dg-warning "deprecated" "" { target c++2a } }
34 two sink_2_12(const A&);
39 const A ca = a; // { dg-error "deleted" }
41 const volatile A cva = a; // { dg-error "deleted" }
42 sink_2_12(va); // { dg-error "" }
43 sink_2_12(cva); // { dg-error "" }
44 sink_2_12(v_source()); // { dg-error "" }
45 sink_2_12(cv_source()); // { dg-error "" }
50 three sink_2_13(volatile A&);
55 const A ca = a; // { dg-error "deleted" }
57 const volatile A cva = a; // { dg-error "deleted" }
58 sink_2_13(ca); // { dg-error "" }
59 sink_2_13(cva); // { dg-error "" }
60 sink_2_13(source()); // { dg-error "" }
61 sink_2_13(c_source()); // { dg-error "" }
62 sink_2_13(v_source()); // { dg-error "" }
63 sink_2_13(cv_source()); // { dg-error "" }
68 four sink_2_14(const volatile A&);
73 const A ca = a; // { dg-error "deleted" }
75 const volatile A cva = a; // { dg-error "deleted" }
76 sink_2_14(source()); // { dg-error "" }
77 sink_2_14(c_source()); // { dg-error "" }
78 sink_2_14(v_source()); // { dg-error "" }
79 sink_2_14(cv_source()); // { dg-error "" }
89 const A ca = a; // { dg-error "deleted" }
91 const volatile A cva = a; // { dg-error "deleted" }
92 sink_2_15(ca); // { dg-error "" }
93 sink_2_15(va); // { dg-error "" }
94 sink_2_15(cva); // { dg-error "" }
95 sink_2_15(c_source()); // { dg-error "" }
96 sink_2_15(v_source()); // { dg-error "" }
97 sink_2_15(cv_source()); // { dg-error "" }
102 six sink_2_16(const A&&);
107 const A ca = a; // { dg-error "deleted" }
109 const volatile A cva = a; // { dg-error "deleted" }
110 sink_2_16(ca); // { dg-error "" }
111 sink_2_16(va); // { dg-error "" }
112 sink_2_16(cva); // { dg-error "" }
113 sink_2_16(v_source()); // { dg-error "" }
114 sink_2_16(cv_source()); // { dg-error "" }
119 seven sink_2_17(volatile A&&);
124 const A ca = a; // { dg-error "deleted" }
126 const volatile A cva = a; // { dg-error "deleted" }
127 sink_2_17(ca); // { dg-error "" }
128 sink_2_17(va); // { dg-error "" }
129 sink_2_17(cva); // { dg-error "" }
130 sink_2_17(c_source()); // { dg-error "" }
131 sink_2_17(cv_source()); // { dg-error "" }
136 eight sink_2_18(const volatile A&&);
141 const A ca = a; // { dg-error "deleted" }
143 const volatile A cva = a; // { dg-error "deleted" }
144 sink_2_18(ca); // { dg-error "" }
145 sink_2_18(va); // { dg-error "" }
146 sink_2_18(cva); // { dg-error "" }
150 two sink_2_23(const A&);
151 three sink_2_23(volatile A&);
156 const A ca = a; // { dg-error "deleted" }
158 const volatile A cva = a; // { dg-error "deleted" }
159 sink_2_23(a); // { dg-error "ambiguous" }
160 sink_2_23(cva); // { dg-error "" }
161 sink_2_23(v_source()); // { dg-error "" }
162 sink_2_23(cv_source()); // { dg-error "" }
166 two sink_2_24(const A&);
167 four sink_2_24(const volatile A&);
172 const A ca = a; // { dg-error "deleted" }
174 const volatile A cva = a; // { dg-error "deleted" }
175 sink_2_24(v_source()); // { dg-error "" }
176 sink_2_24(cv_source()); // { dg-error "" }
180 three sink_2_34(volatile A&);
181 four sink_2_34(const volatile A&);
186 const A ca = a; // { dg-error "deleted" }
188 const volatile A cva = a; // { dg-error "deleted" }
189 sink_2_34(source()); // { dg-error "" }
190 sink_2_34(c_source()); // { dg-error "" }
191 sink_2_34(v_source()); // { dg-error "" }
192 sink_2_34(cv_source()); // { dg-error "" }
196 two sink_2_25(const A&);
197 five sink_2_25( A&&);
202 const A ca = a; // { dg-error "deleted" }
204 const volatile A cva = a; // { dg-error "deleted" }
205 sink_2_25(va); // { dg-error "" }
206 sink_2_25(cva); // { dg-error "" }
207 sink_2_25(v_source()); // { dg-error "" }
208 sink_2_25(cv_source()); // { dg-error "" }
212 two sink_2_26(const A&);
213 six sink_2_26(const A&&);
218 const A ca = a; // { dg-error "deleted" }
220 const volatile A cva = a; // { dg-error "deleted" }
221 sink_2_26(va); // { dg-error "" }
222 sink_2_26(cva); // { dg-error "" }
223 sink_2_26(v_source()); // { dg-error "" }
224 sink_2_26(cv_source()); // { dg-error "" }
228 two sink_2_27(const A&);
229 seven sink_2_27(volatile A&&);
234 const A ca = a; // { dg-error "deleted" }
236 const volatile A cva = a; // { dg-error "deleted" }
237 sink_2_27(va); // { dg-error "" }
238 sink_2_27(cva); // { dg-error "" }
239 sink_2_27(cv_source()); // { dg-error "" }
243 two sink_2_28(const A&);
244 eight sink_2_28(const volatile A&&);
249 const A ca = a; // { dg-error "deleted" }
251 const volatile A cva = a; // { dg-error "deleted" }
252 sink_2_28(va); // { dg-error "" }
253 sink_2_28(cva); // { dg-error "" }
257 three sink_2_35(volatile A&);
258 five sink_2_35( A&&);
263 const A ca = a; // { dg-error "deleted" }
265 const volatile A cva = a; // { dg-error "deleted" }
266 sink_2_35(ca); // { dg-error "" }
267 sink_2_35(cva); // { dg-error "" }
268 sink_2_35(c_source()); // { dg-error "" }
269 sink_2_35(v_source()); // { dg-error "" }
270 sink_2_35(cv_source()); // { dg-error "" }
274 three sink_2_36(volatile A&);
275 six sink_2_36(const A&&);
280 const A ca = a; // { dg-error "deleted" }
282 const volatile A cva = a; // { dg-error "deleted" }
283 sink_2_36(ca); // { dg-error "" }
284 sink_2_36(cva); // { dg-error "" }
285 sink_2_36(v_source()); // { dg-error "" }
286 sink_2_36(cv_source()); // { dg-error "" }
290 three sink_2_37(volatile A&);
291 seven sink_2_37(volatile A&&);
296 const A ca = a; // { dg-error "deleted" }
298 const volatile A cva = a; // { dg-error "deleted" }
299 sink_2_37(ca); // { dg-error "" }
300 sink_2_37(cva); // { dg-error "" }
301 sink_2_37(c_source()); // { dg-error "" }
302 sink_2_37(cv_source()); // { dg-error "" }
306 three sink_2_38(volatile A&);
307 eight sink_2_38(const volatile A&&);
312 const A ca = a; // { dg-error "deleted" }
314 const volatile A cva = a; // { dg-error "deleted" }
315 sink_2_38(ca); // { dg-error "" }
316 sink_2_38(cva); // { dg-error "" }
319 four sink_2_45(const volatile A&);
320 five sink_2_45( A&&);
325 const A ca = a; // { dg-error "deleted" }
327 const volatile A cva = a; // { dg-error "deleted" }
328 sink_2_45(c_source()); // { dg-error "" }
329 sink_2_45(v_source()); // { dg-error "" }
330 sink_2_45(cv_source()); // { dg-error "" }
334 four sink_2_46(const volatile A&);
335 six sink_2_46(const A&&);
340 const A ca = a; // { dg-error "deleted" }
342 const volatile A cva = a; // { dg-error "deleted" }
343 sink_2_46(v_source()); // { dg-error "" }
344 sink_2_46(cv_source()); // { dg-error "" }
348 four sink_2_47(const volatile A&);
349 seven sink_2_47(volatile A&&);
354 const A ca = a; // { dg-error "deleted" }
356 const volatile A cva = a; // { dg-error "deleted" }
357 sink_2_47(c_source()); // { dg-error "" }
358 sink_2_47(cv_source()); // { dg-error "" }
362 five sink_2_56( A&&);
363 six sink_2_56(const A&&);
368 const A ca = a; // { dg-error "deleted" }
370 const volatile A cva = a; // { dg-error "deleted" }
371 sink_2_56(a); // { dg-error "" }
372 sink_2_56(ca); // { dg-error "" }
373 sink_2_56(va); // { dg-error "" }
374 sink_2_56(cva); // { dg-error "" }
375 sink_2_56(v_source()); // { dg-error "" }
376 sink_2_56(cv_source()); // { dg-error "" }
380 five sink_2_57( A&&);
381 seven sink_2_57(volatile A&&);
386 const A ca = a; // { dg-error "deleted" }
388 const volatile A cva = a; // { dg-error "deleted" }
389 sink_2_57(a); // { dg-error "" }
390 sink_2_57(va); // { dg-error "" }
391 sink_2_57(ca); // { dg-error "" }
392 sink_2_57(cva); // { dg-error "" }
393 sink_2_57(c_source()); // { dg-error "" }
394 sink_2_57(cv_source()); // { dg-error "" }
398 five sink_2_58( A&&);
399 eight sink_2_58(const volatile A&&);
404 const A ca = a; // { dg-error "deleted" }
406 const volatile A cva = a; // { dg-error "deleted" }
407 sink_2_58(a); // { dg-error "" }
408 sink_2_58(ca); // { dg-error "" }
409 sink_2_58(va); // { dg-error "" }
410 sink_2_58(cva); // { dg-error "" }
413 six sink_2_67(const A&&);
414 seven sink_2_67(volatile A&&);
419 const A ca = a; // { dg-error "deleted" }
421 const volatile A cva = a; // { dg-error "deleted" }
422 sink_2_67(a); // { dg-error "" }
423 sink_2_67(ca); // { dg-error "" }
424 sink_2_67(va); // { dg-error "" }
425 sink_2_67(cva); // { dg-error "" }
426 sink_2_67(source()); // { dg-error "" }
427 sink_2_67(cv_source()); // { dg-error "" }
431 six sink_2_68(const A&&);
432 eight sink_2_68(const volatile A&&);
437 const A ca = a; // { dg-error "deleted" }
439 const volatile A cva = a; // { dg-error "deleted" }
440 sink_2_68(a); // { dg-error "" }
441 sink_2_68(ca); // { dg-error "" }
442 sink_2_68(va); // { dg-error "" }
443 sink_2_68(cva); // { dg-error "" }
447 seven sink_2_78(volatile A&&);
448 eight sink_2_78(const volatile A&&);
453 const A ca = a; // { dg-error "deleted" }
455 const volatile A cva = a; // { dg-error "deleted" }
456 sink_2_78(a); // { dg-error "" }
457 sink_2_78(ca); // { dg-error "" }
458 sink_2_78(va); // { dg-error "" }
459 sink_2_78(cva); // { dg-error "" }
465 return test2_12() + test2_13() + test2_15() + test2_16() +
466 test2_17() + test2_23() + test2_25() + test2_26() +
467 test2_27() + test2_35() + test2_36() + test2_37() +
468 test2_56() + test2_57() + test2_67();