]>
Commit | Line | Data |
---|---|---|
8af2fec4 RY |
1 | // I, Howard Hinnant, hereby place this code in the public domain. |
2 | ||
e7f1930f | 3 | // Test overload resolution among reference types |
8af2fec4 | 4 | |
4b2e63de | 5 | // { dg-do compile { target c++11 } } |
c74459ea | 6 | // { dg-options "-fno-ipa-icf" } |
8af2fec4 RY |
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(); | |
a2e70335 | 23 | A(const volatile A&&); |
8af2fec4 RY |
24 | }; |
25 | ||
26 | A source(); | |
27 | const A c_source(); | |
8a902edb MP |
28 | volatile A v_source(); // { dg-warning "deprecated" "" { target c++2a } } |
29 | const volatile A cv_source(); // { dg-warning "deprecated" "" { target c++2a } } | |
8af2fec4 RY |
30 | |
31 | // 6 at a time | |
32 | ||
feb6efc1 | 33 | one sink_6_123456( A&); // { dg-message "one sink_6_123456|no known conversion" } |
89606913 JM |
34 | two sink_6_123456(const A&); |
35 | three sink_6_123456(volatile A&); | |
36 | four sink_6_123456(const volatile A&); | |
37 | five sink_6_123456( A&&); | |
38 | six sink_6_123456(const A&&); | |
8af2fec4 RY |
39 | |
40 | int test6_123456() | |
41 | { | |
42 | A a; | |
a2e70335 | 43 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 44 | volatile A va; |
a2e70335 | 45 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
46 | sink_6_123456(v_source()); // { dg-error "" } |
47 | sink_6_123456(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
48 | return 0; |
49 | } | |
50 | ||
feb6efc1 | 51 | one sink_6_123457( A&); // { dg-message "one sink_6_123457|no known conversion" } |
89606913 JM |
52 | two sink_6_123457(const A&); |
53 | three sink_6_123457(volatile A&); | |
54 | four sink_6_123457(const volatile A&); | |
55 | five sink_6_123457( A&&); | |
56 | seven sink_6_123457(volatile A&&); | |
8af2fec4 RY |
57 | |
58 | int test6_123457() | |
59 | { | |
60 | A a; | |
a2e70335 | 61 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 62 | volatile A va; |
a2e70335 | 63 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 | 64 | sink_6_123457(cv_source()); // { dg-error "" } |
8af2fec4 RY |
65 | return 0; |
66 | } | |
67 | ||
89606913 JM |
68 | two sink_6_235678(const A&); |
69 | three sink_6_235678(volatile A&); | |
70 | five sink_6_235678( A&&); | |
71 | six sink_6_235678(const A&&); | |
72 | seven sink_6_235678(volatile A&&); | |
e7f1930f | 73 | eight sink_6_235678(const volatile A&&); // { dg-message "" } |
8af2fec4 RY |
74 | |
75 | int test6_235678() | |
76 | { | |
77 | A a; | |
a2e70335 | 78 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 79 | volatile A va; |
a2e70335 | 80 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
81 | sink_6_235678(a); // { dg-error "" } |
82 | sink_6_235678(cva); // { dg-error "" } | |
8af2fec4 RY |
83 | return 0; |
84 | } | |
85 | ||
89606913 JM |
86 | two sink_6_234678(const A&); |
87 | three sink_6_234678(volatile A&); | |
88 | four sink_6_234678(const volatile A&); | |
89 | six sink_6_234678(const A&&); | |
90 | seven sink_6_234678(volatile A&&); | |
91 | eight sink_6_234678(const volatile A&&); | |
8af2fec4 RY |
92 | |
93 | int test6_234678() | |
94 | { | |
95 | A a; | |
a2e70335 | 96 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 97 | volatile A va; |
a2e70335 | 98 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
99 | sink_6_234678(a); // { dg-error "" } |
100 | sink_6_234678(source()); // { dg-error "" } | |
8af2fec4 RY |
101 | return 0; |
102 | } | |
103 | ||
89606913 JM |
104 | two sink_6_234578(const A&); |
105 | three sink_6_234578(volatile A&); | |
106 | four sink_6_234578(const volatile A&); | |
107 | five sink_6_234578( A&&); | |
108 | seven sink_6_234578(volatile A&&); | |
109 | eight sink_6_234578(const volatile A&&); | |
8af2fec4 RY |
110 | |
111 | int test6_234578() | |
112 | { | |
113 | A a; | |
a2e70335 | 114 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 115 | volatile A va; |
a2e70335 | 116 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 | 117 | sink_6_234578(a); // { dg-error "" } |
8af2fec4 RY |
118 | return 0; |
119 | } | |
120 | ||
89606913 JM |
121 | two sink_6_234568(const A&); |
122 | three sink_6_234568(volatile A&); | |
123 | four sink_6_234568(const volatile A&); | |
124 | five sink_6_234568( A&&); | |
125 | six sink_6_234568(const A&&); | |
126 | eight sink_6_234568(const volatile A&&); | |
8af2fec4 RY |
127 | |
128 | int test6_234568() | |
129 | { | |
130 | A a; | |
a2e70335 | 131 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 132 | volatile A va; |
a2e70335 | 133 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 | 134 | sink_6_234568(a); // { dg-error "" } |
8af2fec4 RY |
135 | return 0; |
136 | } | |
137 | ||
feb6efc1 | 138 | two sink_6_234567(const A&); // { dg-message "two sink_6_234567|no known conversion" } |
89606913 JM |
139 | three sink_6_234567(volatile A&); |
140 | four sink_6_234567(const volatile A&); | |
141 | five sink_6_234567( A&&); | |
142 | six sink_6_234567(const A&&); | |
143 | seven sink_6_234567(volatile A&&); | |
8af2fec4 RY |
144 | |
145 | int test6_234567() | |
146 | { | |
147 | A a; | |
a2e70335 | 148 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 149 | volatile A va; |
a2e70335 | 150 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
151 | sink_6_234567(a); // { dg-error "" } |
152 | sink_6_234567(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
153 | return 0; |
154 | } | |
155 | ||
156 | one sink_6_134678( A&); | |
157 | three sink_6_134678(volatile A&); | |
158 | four sink_6_134678(const volatile A&); | |
89606913 JM |
159 | six sink_6_134678(const A&&); |
160 | seven sink_6_134678(volatile A&&); | |
161 | eight sink_6_134678(const volatile A&&); | |
8af2fec4 RY |
162 | |
163 | int test6_134678() | |
164 | { | |
165 | A a; | |
a2e70335 | 166 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 167 | volatile A va; |
a2e70335 | 168 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 | 169 | sink_6_134678(source()); // { dg-error "" } |
8af2fec4 RY |
170 | return 0; |
171 | } | |
172 | ||
173 | one sink_6_124678( A&); | |
89606913 | 174 | two sink_6_124678(const A&); |
8af2fec4 | 175 | four sink_6_124678(const volatile A&); |
89606913 JM |
176 | six sink_6_124678(const A&&); |
177 | seven sink_6_124678(volatile A&&); | |
178 | eight sink_6_124678(const volatile A&&); | |
8af2fec4 RY |
179 | |
180 | int test6_124678() | |
181 | { | |
182 | A a; | |
a2e70335 | 183 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 184 | volatile A va; |
a2e70335 | 185 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 | 186 | sink_6_124678(source()); // { dg-error "" } |
8af2fec4 RY |
187 | return 0; |
188 | } | |
189 | ||
190 | one sink_6_123678( A&); | |
89606913 | 191 | two sink_6_123678(const A&); |
8af2fec4 | 192 | three sink_6_123678(volatile A&); |
89606913 JM |
193 | six sink_6_123678(const A&&); |
194 | seven sink_6_123678(volatile A&&); | |
e7f1930f | 195 | eight sink_6_123678(const volatile A&&); // { dg-message "" } |
8af2fec4 RY |
196 | |
197 | int test6_123678() | |
198 | { | |
199 | A a; | |
a2e70335 | 200 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 201 | volatile A va; |
a2e70335 | 202 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
203 | sink_6_123678(cva); // { dg-error "" } |
204 | sink_6_123678(source()); // { dg-error "" } | |
8af2fec4 RY |
205 | return 0; |
206 | } | |
207 | ||
feb6efc1 | 208 | one sink_6_123567( A&); // { dg-message "one sink_6_123567|no known conversion" } |
89606913 JM |
209 | two sink_6_123567(const A&); |
210 | three sink_6_123567(volatile A&); | |
211 | five sink_6_123567( A&&); | |
212 | six sink_6_123567(const A&&); | |
213 | seven sink_6_123567(volatile A&&); | |
8af2fec4 RY |
214 | |
215 | int test6_123567() | |
216 | { | |
217 | A a; | |
a2e70335 | 218 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 219 | volatile A va; |
a2e70335 | 220 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
221 | sink_6_123567(cva); // { dg-error "" } |
222 | sink_6_123567(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
223 | return 0; |
224 | } | |
225 | ||
e7f1930f JM |
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 "" } | |
232 | ||
233 | int test6_123568() | |
234 | { | |
235 | A a; | |
a2e70335 | 236 | const A ca = a; // { dg-error "deleted" } |
e7f1930f | 237 | volatile A va; |
a2e70335 | 238 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 | 239 | sink_6_123568(cva); // { dg-error "" } |
e7f1930f JM |
240 | return 0; |
241 | } | |
242 | ||
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 "" } | |
249 | ||
250 | int test6_123578() | |
251 | { | |
252 | A a; | |
a2e70335 | 253 | const A ca = a; // { dg-error "deleted" } |
e7f1930f | 254 | volatile A va; |
a2e70335 | 255 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 | 256 | sink_6_123578(cva); // { dg-error "" } |
e7f1930f JM |
257 | return 0; |
258 | } | |
259 | ||
feb6efc1 | 260 | one sink_6_123467( A&); // { dg-message "one sink_6_123467|no known conversion" } |
89606913 JM |
261 | two sink_6_123467(const A&); |
262 | three sink_6_123467(volatile A&); | |
263 | four sink_6_123467(const volatile A&); | |
264 | six sink_6_123467(const A&&); | |
265 | seven sink_6_123467(volatile A&&); | |
8af2fec4 RY |
266 | |
267 | int test6_123467() | |
268 | { | |
269 | A a; | |
a2e70335 | 270 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 271 | volatile A va; |
a2e70335 | 272 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
273 | sink_6_123467(source()); // { dg-error "" } |
274 | sink_6_123467(cv_source()); // { dg-error "" } | |
8af2fec4 RY |
275 | return 0; |
276 | } | |
277 | ||
feb6efc1 | 278 | one sink_6_124567( A&); // { dg-message "one sink_6_124567|no known conversion" } |
89606913 JM |
279 | two sink_6_124567(const A&); |
280 | four sink_6_124567(const volatile A&); | |
281 | five sink_6_124567( A&&); | |
282 | six sink_6_124567(const A&&); | |
283 | seven sink_6_124567(volatile A&&); | |
8af2fec4 RY |
284 | |
285 | int test6_124567() | |
286 | { | |
287 | A a; | |
a2e70335 | 288 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 289 | volatile A va; |
a2e70335 | 290 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 | 291 | sink_6_124567(cv_source()); // { dg-error "" } |
8af2fec4 RY |
292 | return 0; |
293 | } | |
294 | ||
e7f1930f JM |
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 "" } | |
301 | ||
302 | int test6_125678() | |
303 | { | |
304 | A a; | |
a2e70335 | 305 | const A ca = a; // { dg-error "deleted" } |
e7f1930f | 306 | volatile A va; |
a2e70335 | 307 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
308 | sink_6_125678(va); // { dg-error "" } |
309 | sink_6_125678(cva); // { dg-error "" } | |
e7f1930f JM |
310 | return 0; |
311 | } | |
312 | ||
feb6efc1 | 313 | one sink_6_134567( A&); // { dg-message "one sink_6_134567|no known conversion" } |
89606913 JM |
314 | three sink_6_134567(volatile A&); |
315 | four sink_6_134567(const volatile A&); | |
316 | five sink_6_134567( A&&); | |
317 | six sink_6_134567(const A&&); | |
318 | seven sink_6_134567(volatile A&&); | |
8af2fec4 RY |
319 | |
320 | int test6_134567() | |
321 | { | |
322 | A a; | |
a2e70335 | 323 | const A ca = a; // { dg-error "deleted" } |
8af2fec4 | 324 | volatile A va; |
a2e70335 | 325 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 | 326 | sink_6_134567(cv_source()); // { dg-error "" } |
8af2fec4 RY |
327 | return 0; |
328 | } | |
329 | ||
e7f1930f JM |
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 "" } | |
336 | ||
337 | int test6_135678() | |
338 | { | |
339 | A a; | |
a2e70335 | 340 | const A ca = a; // { dg-error "deleted" } |
e7f1930f | 341 | volatile A va; |
a2e70335 | 342 | const volatile A cva = a; // { dg-error "deleted" } |
89606913 JM |
343 | sink_6_135678(ca); // { dg-error "" } |
344 | sink_6_135678(cva); // { dg-error "" } | |
e7f1930f JM |
345 | return 0; |
346 | } | |
347 | ||
8af2fec4 RY |
348 | int main() |
349 | { | |
350 | return test6_235678() + test6_234678() + test6_234578() + test6_234568() + | |
351 | test6_234567() + test6_134678() + test6_124678() + test6_123678() + | |
352 | test6_123567(); | |
353 | } |