1 // I, Howard Hinnant, hereby place this code in the public domain.
3 // Test overlaod resolution among referece types
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];};
23 A(const volatile A&&);
28 volatile A v_source();
29 const volatile A cv_source();
33 one sink_6_123456( A&); // { dg-error "" }
34 two sink_6_123456(const A&); // { dg-error "" }
35 three sink_6_123456(volatile A&); // { dg-error "" }
36 four sink_6_123456(const volatile A&); // { dg-error "" }
37 five sink_6_123456( A&&); // { dg-error "" }
38 six sink_6_123456(const A&&); // { dg-error "" }
45 const volatile A cva = a;
46 sink_6_123456(v_source()); // { dg-error "no match" }
47 sink_6_123456(cv_source()); // { dg-error "no match" }
51 one sink_6_123457( A&); // { dg-error "" }
52 two sink_6_123457(const A&); // { dg-error "" }
53 three sink_6_123457(volatile A&); // { dg-error "" }
54 four sink_6_123457(const volatile A&); // { dg-error "" }
55 five sink_6_123457( A&&); // { dg-error "" }
56 seven sink_6_123457(volatile A&&); // { dg-error "" }
63 const volatile A cva = a;
64 sink_6_123457(cv_source()); // { dg-error "no match" }
68 two sink_6_235678(const A&); // { dg-error "" }
69 three sink_6_235678(volatile A&); // { dg-error "" }
70 five sink_6_235678( A&&); // { dg-error "" }
71 six sink_6_235678(const A&&); // { dg-error "" }
72 seven sink_6_235678(volatile A&&); // { dg-error "" }
73 eight sink_6_235678(const volatile A&&); // { dg-error "" }
80 const volatile A cva = a;
81 sink_6_235678(a); // { dg-error "ambiguous" }
85 two sink_6_234678(const A&); // { dg-error "" }
86 three sink_6_234678(volatile A&); // { dg-error "" }
87 four sink_6_234678(const volatile A&); // { dg-error "" }
88 six sink_6_234678(const A&&); // { dg-error "" }
89 seven sink_6_234678(volatile A&&); // { dg-error "" }
90 eight sink_6_234678(const volatile A&&); // { dg-error "" }
97 const volatile A cva = a;
98 sink_6_234678(a); // { dg-error "ambiguous" }
99 sink_6_234678(source()); // { dg-error "ambiguous" }
103 two sink_6_234578(const A&); // { dg-error "" }
104 three sink_6_234578(volatile A&); // { dg-error "" }
105 four sink_6_234578(const volatile A&); // { dg-error "" }
106 five sink_6_234578( A&&); // { dg-error "" }
107 seven sink_6_234578(volatile A&&); // { dg-error "" }
108 eight sink_6_234578(const volatile A&&); // { dg-error "" }
115 const volatile A cva = a;
116 sink_6_234578(a); // { dg-error "ambiguous" }
120 two sink_6_234568(const A&); // { dg-error "" }
121 three sink_6_234568(volatile A&); // { dg-error "" }
122 four sink_6_234568(const volatile A&); // { dg-error "" }
123 five sink_6_234568( A&&); // { dg-error "" }
124 six sink_6_234568(const A&&); // { dg-error "" }
125 eight sink_6_234568(const volatile A&&); // { dg-error "" }
132 const volatile A cva = a;
133 sink_6_234568(a); // { dg-error "ambiguous" }
137 two sink_6_234567(const A&); // { dg-error "" }
138 three sink_6_234567(volatile A&); // { dg-error "" }
139 four sink_6_234567(const volatile A&); // { dg-error "" }
140 five sink_6_234567( A&&); // { dg-error "" }
141 six sink_6_234567(const A&&); // { dg-error "" }
142 seven sink_6_234567(volatile A&&); // { dg-error "" }
149 const volatile A cva = a;
150 sink_6_234567(a); // { dg-error "ambiguous" }
151 sink_6_234567(cv_source()); // { dg-error "no match" }
155 one sink_6_134678( A&);
156 three sink_6_134678(volatile A&);
157 four sink_6_134678(const volatile A&);
158 six sink_6_134678(const A&&); // { dg-error "" }
159 seven sink_6_134678(volatile A&&); // { dg-error "" }
160 eight sink_6_134678(const volatile A&&); // { dg-error "" }
167 const volatile A cva = a;
168 sink_6_134678(source()); // { dg-error "ambiguous" }
172 one sink_6_124678( A&);
173 two sink_6_124678(const A&); // { dg-error "" }
174 four sink_6_124678(const volatile A&);
175 six sink_6_124678(const A&&); // { dg-error "" }
176 seven sink_6_124678(volatile A&&); // { dg-error "" }
177 eight sink_6_124678(const volatile A&&); // { dg-error "" }
184 const volatile A cva = a;
185 sink_6_124678(source()); // { dg-error "ambiguous" }
189 one sink_6_123678( A&);
190 two sink_6_123678(const A&); // { dg-error "" }
191 three sink_6_123678(volatile A&);
192 six sink_6_123678(const A&&); // { dg-error "" }
193 seven sink_6_123678(volatile A&&); // { dg-error "" }
194 eight sink_6_123678(const volatile A&&); // { dg-error "" }
201 const volatile A cva = a;
202 sink_6_123678(source()); // { dg-error "ambiguous" }
206 one sink_6_123567( A&); // { dg-error "" }
207 two sink_6_123567(const A&); // { dg-error "" }
208 three sink_6_123567(volatile A&); // { dg-error "" }
209 five sink_6_123567( A&&); // { dg-error "" }
210 six sink_6_123567(const A&&); // { dg-error "" }
211 seven sink_6_123567(volatile A&&); // { dg-error "" }
218 const volatile A cva = a;
219 sink_6_123567(cva); // { dg-error "no match" }
220 sink_6_123567(cv_source()); // { dg-error "no match" }
224 one sink_6_123467( A&); // { dg-error "" }
225 two sink_6_123467(const A&); // { dg-error "" }
226 three sink_6_123467(volatile A&); // { dg-error "" }
227 four sink_6_123467(const volatile A&); // { dg-error "" }
228 six sink_6_123467(const A&&); // { dg-error "" }
229 seven sink_6_123467(volatile A&&); // { dg-error "" }
236 const volatile A cva = a;
237 sink_6_123467(source()); // { dg-error "ambiguous" }
238 sink_6_123467(cv_source()); // { dg-error "no match" }
242 one sink_6_124567( A&); // { dg-error "" }
243 two sink_6_124567(const A&); // { dg-error "" }
244 four sink_6_124567(const volatile A&); // { dg-error "" }
245 five sink_6_124567( A&&); // { dg-error "" }
246 six sink_6_124567(const A&&); // { dg-error "" }
247 seven sink_6_124567(volatile A&&); // { dg-error "" }
254 const volatile A cva = a;
255 sink_6_124567(cv_source()); // { dg-error "no match" }
259 one sink_6_134567( A&); // { dg-error "" }
260 three sink_6_134567(volatile A&); // { dg-error "" }
261 four sink_6_134567(const volatile A&); // { dg-error "" }
262 five sink_6_134567( A&&); // { dg-error "" }
263 six sink_6_134567(const A&&); // { dg-error "" }
264 seven sink_6_134567(volatile A&&); // { dg-error "" }
271 const volatile A cva = a;
272 sink_6_134567(cv_source()); // { dg-error "no match" }
278 return test6_235678() + test6_234678() + test6_234578() + test6_234568() +
279 test6_234567() + test6_134678() + test6_124678() + test6_123678() +