* decl.c (make_typename_type): s/parameters/arguments/.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / rv2n.C
blob65eda80fba090569f943a0f2c8a2c785abee8dc5
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];};
20 struct A
22     A();
23     A(const volatile A&&);
26                A    source();
27 const          A  c_source();
28       volatile A  v_source();
29 const volatile A cv_source();
31 // 2 at a time
33 one   sink_2_12(               A&);
34 two   sink_2_12(const          A&);
36 int test2_12()
38                    A a;
39     const          A ca = a; // { dg-error "deleted" }
40           volatile A va;
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 "" }
46     return 0;
49 one   sink_2_13(               A&);
50 three sink_2_13(volatile       A&);
52 int test2_13()
54                    A a;
55     const          A ca = a; // { dg-error "deleted" }
56           volatile A va;
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 "" }
64     return 0;
67 one   sink_2_14(               A&);
68 four  sink_2_14(const volatile A&);
70 int test2_14()
72                    A a;
73     const          A ca = a; // { dg-error "deleted" }
74           volatile A va;
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 "" }
80     return 0;
83 one   sink_2_15(               A&);
84 five  sink_2_15(               A&&);
86 int test2_15()
88                    A a;
89     const          A ca = a; // { dg-error "deleted" }
90           volatile A va;
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 "" }
98     return 0;
101 one   sink_2_16(               A&);
102 six   sink_2_16(const          A&&);
104 int test2_16()
106                    A a;
107     const          A ca = a; // { dg-error "deleted" }
108           volatile A va;
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 "" }
115     return 0;
118 one   sink_2_17(               A&);
119 seven sink_2_17(volatile       A&&);
121 int test2_17()
123                    A a;
124     const          A ca = a; // { dg-error "deleted" }
125           volatile A va;
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 "" }
132     return 0;
135 one   sink_2_18(               A&);
136 eight sink_2_18(const volatile A&&);
138 int test2_18()
140                    A a;
141     const          A ca = a; // { dg-error "deleted" }
142           volatile A va;
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 "" }
147     return 0;
150 two   sink_2_23(const          A&);
151 three sink_2_23(volatile       A&);
153 int test2_23()
155                    A a;
156     const          A ca = a; // { dg-error "deleted" }
157           volatile A va;
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 "" }
163     return 0;
166 two   sink_2_24(const          A&);
167 four  sink_2_24(const volatile A&);
169 int test2_24()
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_2_24(v_source());   // { dg-error "" }
176     sink_2_24(cv_source());  // { dg-error "" }
177     return 0;
180 three sink_2_34(volatile       A&);
181 four  sink_2_34(const volatile A&);
183 int test2_34()
185                    A a;
186     const          A ca = a; // { dg-error "deleted" }
187           volatile A va;
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 "" }
193     return 0;
196 two   sink_2_25(const          A&);
197 five  sink_2_25(               A&&);
199 int test2_25()
201                    A a;
202     const          A ca = a; // { dg-error "deleted" }
203           volatile A va;
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 "" }
209     return 0;
212 two   sink_2_26(const          A&);
213 six   sink_2_26(const          A&&);
215 int test2_26()
217                    A a;
218     const          A ca = a; // { dg-error "deleted" }
219           volatile A va;
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 "" }
225     return 0;
228 two   sink_2_27(const          A&);
229 seven sink_2_27(volatile       A&&);
231 int test2_27()
233                    A a;
234     const          A ca = a; // { dg-error "deleted" }
235           volatile A va;
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 "" }
240     return 0;
243 two   sink_2_28(const          A&);
244 eight sink_2_28(const volatile A&&);
246 int test2_28()
248                    A a;
249     const          A ca = a; // { dg-error "deleted" }
250           volatile A va;
251     const volatile A cva = a; // { dg-error "deleted" }
252     sink_2_28(va);              // { dg-error "" }
253     sink_2_28(cva);             // { dg-error "" }
254     return 0;
257 three sink_2_35(volatile       A&);
258 five  sink_2_35(               A&&);
260 int test2_35()
262                    A a;
263     const          A ca = a; // { dg-error "deleted" }
264           volatile A va;
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 "" }
271     return 0;
274 three sink_2_36(volatile       A&);
275 six   sink_2_36(const          A&&);
277 int test2_36()
279                    A a;
280     const          A ca = a; // { dg-error "deleted" }
281           volatile A va;
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 "" }
287     return 0;
290 three sink_2_37(volatile       A&);
291 seven sink_2_37(volatile       A&&);
293 int test2_37()
295                    A a;
296     const          A ca = a; // { dg-error "deleted" }
297           volatile A va;
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 "" }
303     return 0;
306 three sink_2_38(volatile       A&);
307 eight sink_2_38(const volatile A&&);
309 void test2_38()
311                    A a;
312     const          A ca = a; // { dg-error "deleted" }
313           volatile A va;
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&&);
322 int test2_45()
324                    A a;
325     const          A ca = a; // { dg-error "deleted" }
326           volatile A va;
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 "" }
331     return 0;
334 four  sink_2_46(const volatile A&);
335 six   sink_2_46(const          A&&);
337 int test2_46()
339                    A a;
340     const          A ca = a; // { dg-error "deleted" }
341           volatile A va;
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 "" }
345     return 0;
348 four  sink_2_47(const volatile A&);
349 seven sink_2_47(volatile       A&&);
351 int test2_47()
353                    A a;
354     const          A ca = a; // { dg-error "deleted" }
355           volatile A va;
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 "" }
359     return 0;
362 five  sink_2_56(               A&&);
363 six   sink_2_56(const          A&&);
365 int test2_56()
367                    A a;
368     const          A ca = a; // { dg-error "deleted" }
369           volatile A va;
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 "" }
377     return 0;
380 five  sink_2_57(               A&&);
381 seven sink_2_57(volatile       A&&);
383 int test2_57()
385                    A a;
386     const          A ca = a; // { dg-error "deleted" }
387           volatile A va;
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 "" }
395     return 0;
398 five  sink_2_58(               A&&);
399 eight sink_2_58(const volatile A&&);
401 void test2_58()
403                    A a;
404     const          A ca = a; // { dg-error "deleted" }
405           volatile A va;
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&&);
416 int test2_67()
418                    A a;
419     const          A ca = a; // { dg-error "deleted" }
420           volatile A va;
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 "" }
428     return 0;
431 six   sink_2_68(const          A&&);
432 eight sink_2_68(const volatile A&&);
434 int test2_68()
436                    A a;
437     const          A ca = a; // { dg-error "deleted" }
438           volatile A va;
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 "" }
444     return 0;
447 seven sink_2_78(volatile       A&&);
448 eight sink_2_78(const volatile A&&);
450 int test2_78()
452                    A a;
453     const          A ca = a; // { dg-error "deleted" }
454           volatile A va;
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 "" }
460     return 0;
463 int main()
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();