Merge from mainline (160224:163495).
[official-gcc/graphite-test-results.git] / gcc / testsuite / g++.dg / cpp0x / rv6n.C
blob6a81f66fa5c19a5f3541159e7cb47b9549036a35
1 // I, Howard Hinnant, hereby place this code in the public domain.
3 // Test overload resolution among reference types
5 // { dg-do compile }
6 // { dg-options "-std=c++0x" }
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&&);      // { dg-error "argument 1" }
26                A    source();
27 const          A  c_source();
28       volatile A  v_source();
29 const volatile A cv_source();
31 // 6 at a time
33 one   sink_6_123456(               A&);  // { dg-message "candidates" }
34 two   sink_6_123456(const          A&);  // { dg-message "note" }
35 three sink_6_123456(volatile       A&);  // { dg-message "note" }
36 four  sink_6_123456(const volatile A&);  // { dg-message "note" }
37 five  sink_6_123456(               A&&);  // { dg-message "note" }
38 six   sink_6_123456(const          A&&);  // { dg-message "note" }
40 int test6_123456()
42                    A a;
43     const          A ca = a; // { dg-error "lvalue" }
44           volatile A va;
45     const volatile A cva = a; // { dg-error "lvalue" }
46     sink_6_123456(v_source());   // { dg-error "no match" }
47     sink_6_123456(cv_source());  // { dg-error "no match" }
48     return 0;
51 one   sink_6_123457(               A&);  // { dg-message "candidates" }
52 two   sink_6_123457(const          A&);  // { dg-message "note" }
53 three sink_6_123457(volatile       A&);  // { dg-message "note" }
54 four  sink_6_123457(const volatile A&);  // { dg-message "note" }
55 five  sink_6_123457(               A&&);  // { dg-message "note" }
56 seven sink_6_123457(volatile       A&&);  // { dg-message "note" }
58 int test6_123457()
60                    A a;
61     const          A ca = a; // { dg-error "lvalue" }
62           volatile A va;
63     const volatile A cva = a; // { dg-error "lvalue" }
64     sink_6_123457(cv_source());  // { dg-error "no match" }
65     return 0;
68 two   sink_6_235678(const          A&);  // { dg-message "candidates" }
69 three sink_6_235678(volatile       A&);  // { dg-message "note" }
70 five  sink_6_235678(               A&&);  // { dg-message "note" }
71 six   sink_6_235678(const          A&&);  // { dg-message "note" }
72 seven sink_6_235678(volatile       A&&);  // { dg-message "note" }
73 eight sink_6_235678(const volatile A&&);  // { dg-message "" }
75 int test6_235678()
77                    A a;
78     const          A ca = a; // { dg-error "lvalue" }
79           volatile A va;
80     const volatile A cva = a; // { dg-error "lvalue" }
81     sink_6_235678(a);  // { dg-error "ambiguous" }
82     sink_6_235678(cva);         // { dg-error "lvalue" }
83     return 0;
86 two   sink_6_234678(const          A&);  // { dg-message "candidates" }
87 three sink_6_234678(volatile       A&);  // { dg-message "note" }
88 four  sink_6_234678(const volatile A&);  // { dg-message "note" }
89 six   sink_6_234678(const          A&&);  // { dg-message "note" }
90 seven sink_6_234678(volatile       A&&);  // { dg-message "note" }
91 eight sink_6_234678(const volatile A&&);  // { dg-message "note" }
93 int test6_234678()
95                    A a;
96     const          A ca = a; // { dg-error "lvalue" }
97           volatile A va;
98     const volatile A cva = a; // { dg-error "lvalue" }
99     sink_6_234678(a);         // { dg-error "ambiguous" }
100     sink_6_234678(source());  // { dg-error "ambiguous" }
101     return 0;
104 two   sink_6_234578(const          A&);  // { dg-message "candidates" }
105 three sink_6_234578(volatile       A&);  // { dg-message "note" }
106 four  sink_6_234578(const volatile A&);  // { dg-message "note" }
107 five  sink_6_234578(               A&&);  // { dg-message "note" }
108 seven sink_6_234578(volatile       A&&);  // { dg-message "note" }
109 eight sink_6_234578(const volatile A&&);  // { dg-message "note" }
111 int test6_234578()
113                    A a;
114     const          A ca = a; // { dg-error "lvalue" }
115           volatile A va;
116     const volatile A cva = a; // { dg-error "lvalue" }
117     sink_6_234578(a);  // { dg-error "ambiguous" }
118     return 0;
121 two   sink_6_234568(const          A&);  // { dg-message "candidates" }
122 three sink_6_234568(volatile       A&);  // { dg-message "note" }
123 four  sink_6_234568(const volatile A&);  // { dg-message "note" }
124 five  sink_6_234568(               A&&);  // { dg-message "note" }
125 six   sink_6_234568(const          A&&);  // { dg-message "note" }
126 eight sink_6_234568(const volatile A&&);  // { dg-message "note" }
128 int test6_234568()
130                    A a;
131     const          A ca = a; // { dg-error "lvalue" }
132           volatile A va;
133     const volatile A cva = a; // { dg-error "lvalue" }
134     sink_6_234568(a);  // { dg-error "ambiguous" }
135     return 0;
138 two   sink_6_234567(const          A&);  // { dg-message "candidates" }
139 three sink_6_234567(volatile       A&);  // { dg-message "note" }
140 four  sink_6_234567(const volatile A&);  // { dg-message "note" }
141 five  sink_6_234567(               A&&);  // { dg-message "note" }
142 six   sink_6_234567(const          A&&);  // { dg-message "note" }
143 seven sink_6_234567(volatile       A&&);  // { dg-message "note" }
145 int test6_234567()
147                    A a;
148     const          A ca = a; // { dg-error "lvalue" }
149           volatile A va;
150     const volatile A cva = a; // { dg-error "lvalue" }
151     sink_6_234567(a);            // { dg-error "ambiguous" }
152     sink_6_234567(cv_source());  // { dg-error "no match" }
153     return 0;
156 one   sink_6_134678(               A&);
157 three sink_6_134678(volatile       A&);
158 four  sink_6_134678(const volatile A&);
159 six   sink_6_134678(const          A&&);  // { dg-message "candidates" }
160 seven sink_6_134678(volatile       A&&);  // { dg-message "note" }
161 eight sink_6_134678(const volatile A&&);  // { dg-message "note" }
163 int test6_134678()
165                    A a;
166     const          A ca = a; // { dg-error "lvalue" }
167           volatile A va;
168     const volatile A cva = a; // { dg-error "lvalue" }
169     sink_6_134678(source());  // { dg-error "ambiguous" }
170     return 0;
173 one   sink_6_124678(               A&);
174 two   sink_6_124678(const          A&);  // { dg-message "candidates" }
175 four  sink_6_124678(const volatile A&);
176 six   sink_6_124678(const          A&&);  // { dg-message "note" }
177 seven sink_6_124678(volatile       A&&);  // { dg-message "note" }
178 eight sink_6_124678(const volatile A&&);  // { dg-message "note" }
180 int test6_124678()
182                    A a;
183     const          A ca = a; // { dg-error "lvalue" }
184           volatile A va;
185     const volatile A cva = a; // { dg-error "lvalue" }
186     sink_6_124678(source());  // { dg-error "ambiguous" }
187     return 0;
190 one   sink_6_123678(               A&);
191 two   sink_6_123678(const          A&);  // { dg-message "candidates" }
192 three sink_6_123678(volatile       A&);
193 six   sink_6_123678(const          A&&);  // { dg-message "note" }
194 seven sink_6_123678(volatile       A&&);  // { dg-message "note" }
195 eight sink_6_123678(const volatile A&&);  // { dg-message "" }
197 int test6_123678()
199                    A a;
200     const          A ca = a; // { dg-error "lvalue" }
201           volatile A va;
202     const volatile A cva = a; // { dg-error "lvalue" }
203     sink_6_123678(cva);         // { dg-error "lvalue" }
204     sink_6_123678(source());  // { dg-error "ambiguous" }
205     return 0;
208 one   sink_6_123567(               A&);  // { dg-message "candidates" }
209 two   sink_6_123567(const          A&);  // { dg-message "note" }
210 three sink_6_123567(volatile       A&);  // { dg-message "note" }
211 five  sink_6_123567(               A&&);  // { dg-message "note" }
212 six   sink_6_123567(const          A&&);  // { dg-message "note" }
213 seven sink_6_123567(volatile       A&&);  // { dg-message "note" }
215 int test6_123567()
217                    A a;
218     const          A ca = a; // { dg-error "lvalue" }
219           volatile A va;
220     const volatile A cva = a; // { dg-error "lvalue" }
221     sink_6_123567(cva);          // { dg-error "no match" }
222     sink_6_123567(cv_source());  // { dg-error "no match" }
223     return 0;
226 one   sink_6_123568(               A&);
227 two   sink_6_123568(const          A&);
228 three sink_6_123568(volatile       A&);
229 five  sink_6_123568(               A&&);
230 six   sink_6_123568(const          A&&);
231 eight sink_6_123568(const volatile A&&); // { dg-message "" }
233 int test6_123568()
235                    A a;
236     const          A ca = a; // { dg-error "lvalue" }
237           volatile A va;
238     const volatile A cva = a; // { dg-error "lvalue" }
239     sink_6_123568(cva); // { dg-error "lvalue" }
240     return 0;
243 one   sink_6_123578(               A&);
244 two   sink_6_123578(const          A&);
245 three sink_6_123578(volatile       A&);
246 five  sink_6_123578(               A&&);
247 seven sink_6_123578(volatile       A&&);
248 eight sink_6_123578(const volatile A&&); // { dg-message "" }
250 int test6_123578()
252                    A a;
253     const          A ca = a; // { dg-error "lvalue" }
254           volatile A va;
255     const volatile A cva = a; // { dg-error "lvalue" }
256     sink_6_123578(cva);         // { dg-error "lvalue" }
257     return 0;
260 one   sink_6_123467(               A&);  // { dg-message "candidates" }
261 two   sink_6_123467(const          A&);  // { dg-message "note" }
262 three sink_6_123467(volatile       A&);  // { dg-message "note" }
263 four  sink_6_123467(const volatile A&);  // { dg-message "note" }
264 six   sink_6_123467(const          A&&);  // { dg-message "note" }
265 seven sink_6_123467(volatile       A&&);  // { dg-message "note" }
267 int test6_123467()
269                    A a;
270     const          A ca = a; // { dg-error "lvalue" }
271           volatile A va;
272     const volatile A cva = a; // { dg-error "lvalue" }
273     sink_6_123467(source());     // { dg-error "ambiguous" }
274     sink_6_123467(cv_source());  // { dg-error "no match" }
275     return 0;
278 one   sink_6_124567(               A&);  // { dg-message "candidates" }
279 two   sink_6_124567(const          A&);  // { dg-message "note" }
280 four  sink_6_124567(const volatile A&);  // { dg-message "note" }
281 five  sink_6_124567(               A&&);  // { dg-message "note" }
282 six   sink_6_124567(const          A&&);  // { dg-message "note" }
283 seven sink_6_124567(volatile       A&&);  // { dg-message "note" }
285 int test6_124567()
287                    A a;
288     const          A ca = a; // { dg-error "lvalue" }
289           volatile A va;
290     const volatile A cva = a; // { dg-error "lvalue" }
291     sink_6_124567(cv_source());  // { dg-error "no match" }
292     return 0;
295 one   sink_6_125678(               A&);
296 two   sink_6_125678(const          A&);
297 five  sink_6_125678(               A&&);
298 six   sink_6_125678(const          A&&);
299 seven sink_6_125678(volatile       A&&); // { dg-message "" }
300 eight sink_6_125678(const volatile A&&); // { dg-message "" }
302 int test6_125678()
304                    A a;
305     const          A ca = a; // { dg-error "lvalue" }
306           volatile A va;
307     const volatile A cva = a; // { dg-error "lvalue" }
308     sink_6_125678(va);          // { dg-error "lvalue" }
309     sink_6_125678(cva);         // { dg-error "lvalue" }
310     return 0;
313 one   sink_6_134567(               A&);  // { dg-message "candidates" }
314 three sink_6_134567(volatile       A&);  // { dg-message "note" }
315 four  sink_6_134567(const volatile A&);  // { dg-message "note" }
316 five  sink_6_134567(               A&&);  // { dg-message "note" }
317 six   sink_6_134567(const          A&&);  // { dg-message "note" }
318 seven sink_6_134567(volatile       A&&);  // { dg-message "note" }
320 int test6_134567()
322                    A a;
323     const          A ca = a; // { dg-error "lvalue" }
324           volatile A va;
325     const volatile A cva = a; // { dg-error "lvalue" }
326     sink_6_134567(cv_source());  // { dg-error "no match" }
327     return 0;
330 one   sink_6_135678(               A&);
331 three sink_6_135678(volatile       A&);
332 five  sink_6_135678(               A&&);
333 six   sink_6_135678(const          A&&); // { dg-message "" }
334 seven sink_6_135678(volatile       A&&);
335 eight sink_6_135678(const volatile A&&); // { dg-message "" }
337 int test6_135678()
339                    A a;
340     const          A ca = a; // { dg-error "lvalue" }
341           volatile A va;
342     const volatile A cva = a; // { dg-error "lvalue" }
343     sink_6_135678(ca);          // { dg-error "lvalue" }
344     sink_6_135678(cva);         // { dg-error "lvalue" }
345     return 0;
348 int main()
350     return test6_235678() + test6_234678() + test6_234578() + test6_234568() +
351            test6_234567() + test6_134678() + test6_124678() + test6_123678() +
352            test6_123567();