is_convertible.pass.cpp revision c52f43e72dfcea03037729649da84c23b3beb04a
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// type_traits
11
12// is_convertible
13
14#include <type_traits>
15
16typedef void Function();
17typedef char Array[1];
18
19int main()
20{
21    {
22    static_assert(( std::is_convertible<void, void>::value), "");
23    static_assert(( std::is_convertible<const void, void>::value), "");
24    static_assert(( std::is_convertible<void, const void>::value), "");
25    static_assert(( std::is_convertible<const void, const void>::value), "");
26
27    static_assert((!std::is_convertible<void, Function>::value), "");
28    static_assert((!std::is_convertible<const void, Function>::value), "");
29
30    static_assert((!std::is_convertible<void, Function&>::value), "");
31    static_assert((!std::is_convertible<const void, Function&>::value), "");
32
33    static_assert((!std::is_convertible<void, Function*>::value), "");
34    static_assert((!std::is_convertible<void, Function* const>::value), "");
35    static_assert((!std::is_convertible<const void, Function*>::value), "");
36    static_assert((!std::is_convertible<const void, Function*const >::value), "");
37
38    static_assert((!std::is_convertible<void, Array>::value), "");
39    static_assert((!std::is_convertible<void, const Array>::value), "");
40    static_assert((!std::is_convertible<const void, Array>::value), "");
41    static_assert((!std::is_convertible<const void, const Array>::value), "");
42
43    static_assert((!std::is_convertible<void, Array&>::value), "");
44    static_assert((!std::is_convertible<void, const Array&>::value), "");
45    static_assert((!std::is_convertible<const void, Array&>::value), "");
46    static_assert((!std::is_convertible<const void, const Array&>::value), "");
47
48    static_assert((!std::is_convertible<void, char>::value), "");
49    static_assert((!std::is_convertible<void, const char>::value), "");
50    static_assert((!std::is_convertible<const void, char>::value), "");
51    static_assert((!std::is_convertible<const void, const char>::value), "");
52
53    static_assert((!std::is_convertible<void, char&>::value), "");
54    static_assert((!std::is_convertible<void, const char&>::value), "");
55    static_assert((!std::is_convertible<const void, char&>::value), "");
56    static_assert((!std::is_convertible<const void, const char&>::value), "");
57
58    static_assert((!std::is_convertible<void, char*>::value), "");
59    static_assert((!std::is_convertible<void, const char*>::value), "");
60    static_assert((!std::is_convertible<const void, char*>::value), "");
61    static_assert((!std::is_convertible<const void, const char*>::value), "");
62    }
63    {
64    static_assert((!std::is_convertible<Function, void>::value), "");
65    static_assert((!std::is_convertible<Function, const void>::value), "");
66
67    static_assert((!std::is_convertible<Function, Function>::value), "");
68
69    static_assert((!std::is_convertible<Function, Function&>::value), "");
70    static_assert((!std::is_convertible<Function, Function&>::value), "");
71
72    static_assert(( std::is_convertible<Function, Function*>::value), "");
73    static_assert(( std::is_convertible<Function, Function* const>::value), "");
74
75    static_assert((!std::is_convertible<Function, Array>::value), "");
76    static_assert((!std::is_convertible<Function, const Array>::value), "");
77
78    static_assert((!std::is_convertible<Function, Array&>::value), "");
79    static_assert((!std::is_convertible<Function, const Array&>::value), "");
80
81    static_assert((!std::is_convertible<Function, char>::value), "");
82    static_assert((!std::is_convertible<Function, const char>::value), "");
83
84    static_assert((!std::is_convertible<Function, char&>::value), "");
85    static_assert((!std::is_convertible<Function, const char&>::value), "");
86
87    static_assert((!std::is_convertible<Function, char*>::value), "");
88    static_assert((!std::is_convertible<Function, const char*>::value), "");
89    }
90    {
91    static_assert((!std::is_convertible<Function&, void>::value), "");
92    static_assert((!std::is_convertible<Function&, const void>::value), "");
93
94    static_assert((!std::is_convertible<Function&, Function>::value), "");
95
96    static_assert(( std::is_convertible<Function&, Function&>::value), "");
97    static_assert(( std::is_convertible<Function&, const Function&>::value), "");
98
99    static_assert(( std::is_convertible<Function&, Function*>::value), "");
100    static_assert(( std::is_convertible<Function&, Function* const>::value), "");
101
102    static_assert((!std::is_convertible<Function&, Array>::value), "");
103    static_assert((!std::is_convertible<Function&, const Array>::value), "");
104
105    static_assert((!std::is_convertible<Function&, Array&>::value), "");
106    static_assert((!std::is_convertible<Function&, const Array&>::value), "");
107
108    static_assert((!std::is_convertible<Function&, char>::value), "");
109    static_assert((!std::is_convertible<Function&, const char>::value), "");
110
111    static_assert((!std::is_convertible<Function&, char&>::value), "");
112    static_assert((!std::is_convertible<Function&, const char&>::value), "");
113
114    static_assert((!std::is_convertible<Function&, char*>::value), "");
115    static_assert((!std::is_convertible<Function&, const char*>::value), "");
116    }
117    {
118    static_assert((!std::is_convertible<Function*, void>::value), "");
119    static_assert((!std::is_convertible<Function*const, void>::value), "");
120    static_assert((!std::is_convertible<Function*, const void>::value), "");
121    static_assert((!std::is_convertible<Function*const, const void>::value), "");
122
123    static_assert((!std::is_convertible<Function*, Function>::value), "");
124    static_assert((!std::is_convertible<Function*const, Function>::value), "");
125
126    static_assert((!std::is_convertible<Function*, Function&>::value), "");
127    static_assert((!std::is_convertible<Function*const, Function&>::value), "");
128
129    static_assert(( std::is_convertible<Function*, Function*>::value), "");
130    static_assert(( std::is_convertible<Function*, Function* const>::value), "");
131    static_assert(( std::is_convertible<Function*const, Function*>::value), "");
132    static_assert(( std::is_convertible<Function*const, Function*const >::value), "");
133
134    static_assert((!std::is_convertible<Function*, Array>::value), "");
135    static_assert((!std::is_convertible<Function*, const Array>::value), "");
136    static_assert((!std::is_convertible<Function*const, Array>::value), "");
137    static_assert((!std::is_convertible<Function*const, const Array>::value), "");
138
139    static_assert((!std::is_convertible<Function*, Array&>::value), "");
140    static_assert((!std::is_convertible<Function*, const Array&>::value), "");
141    static_assert((!std::is_convertible<Function*const, Array&>::value), "");
142    static_assert((!std::is_convertible<Function*const, const Array&>::value), "");
143
144    static_assert((!std::is_convertible<Function*, char>::value), "");
145    static_assert((!std::is_convertible<Function*, const char>::value), "");
146    static_assert((!std::is_convertible<Function*const, char>::value), "");
147    static_assert((!std::is_convertible<Function*const, const char>::value), "");
148
149    static_assert((!std::is_convertible<Function*, char&>::value), "");
150    static_assert((!std::is_convertible<Function*, const char&>::value), "");
151    static_assert((!std::is_convertible<Function*const, char&>::value), "");
152    static_assert((!std::is_convertible<Function*const, const char&>::value), "");
153
154    static_assert((!std::is_convertible<Function*, char*>::value), "");
155    static_assert((!std::is_convertible<Function*, const char*>::value), "");
156    static_assert((!std::is_convertible<Function*const, char*>::value), "");
157    static_assert((!std::is_convertible<Function*const, const char*>::value), "");
158    }
159    {
160    static_assert((!std::is_convertible<Array, void>::value), "");
161    static_assert((!std::is_convertible<const Array, void>::value), "");
162    static_assert((!std::is_convertible<Array, const void>::value), "");
163    static_assert((!std::is_convertible<const Array, const void>::value), "");
164
165    static_assert((!std::is_convertible<Array, Function>::value), "");
166    static_assert((!std::is_convertible<const Array, Function>::value), "");
167
168    static_assert((!std::is_convertible<Array, Function&>::value), "");
169    static_assert((!std::is_convertible<const Array, Function&>::value), "");
170
171    static_assert((!std::is_convertible<Array, Function*>::value), "");
172    static_assert((!std::is_convertible<Array, Function* const>::value), "");
173    static_assert((!std::is_convertible<const Array, Function*>::value), "");
174    static_assert((!std::is_convertible<const Array, Function*const >::value), "");
175
176    static_assert((!std::is_convertible<Array, Array>::value), "");
177    static_assert((!std::is_convertible<Array, const Array>::value), "");
178    static_assert((!std::is_convertible<const Array, Array>::value), "");
179    static_assert((!std::is_convertible<const Array, const Array>::value), "");
180
181    static_assert((!std::is_convertible<Array, Array&>::value), "");
182    static_assert(( std::is_convertible<Array, const Array&>::value), "");
183    static_assert((!std::is_convertible<const Array, Array&>::value), "");
184    static_assert((!std::is_convertible<const Array, const Array&>::value), "");
185
186    static_assert((!std::is_convertible<Array, char>::value), "");
187    static_assert((!std::is_convertible<Array, const char>::value), "");
188    static_assert((!std::is_convertible<const Array, char>::value), "");
189    static_assert((!std::is_convertible<const Array, const char>::value), "");
190
191    static_assert((!std::is_convertible<Array, char&>::value), "");
192    static_assert((!std::is_convertible<Array, const char&>::value), "");
193    static_assert((!std::is_convertible<const Array, char&>::value), "");
194    static_assert((!std::is_convertible<const Array, const char&>::value), "");
195
196    static_assert(( std::is_convertible<Array, char*>::value), "");
197    static_assert(( std::is_convertible<Array, const char*>::value), "");
198    static_assert((!std::is_convertible<const Array, char*>::value), "");
199    static_assert(( std::is_convertible<const Array, const char*>::value), "");
200    }
201    {
202    static_assert((!std::is_convertible<Array&, void>::value), "");
203    static_assert((!std::is_convertible<const Array&, void>::value), "");
204    static_assert((!std::is_convertible<Array&, const void>::value), "");
205    static_assert((!std::is_convertible<const Array&, const void>::value), "");
206
207    static_assert((!std::is_convertible<Array&, Function>::value), "");
208    static_assert((!std::is_convertible<const Array&, Function>::value), "");
209
210    static_assert((!std::is_convertible<Array&, Function&>::value), "");
211    static_assert((!std::is_convertible<const Array&, Function&>::value), "");
212
213    static_assert((!std::is_convertible<Array&, Function*>::value), "");
214    static_assert((!std::is_convertible<Array&, Function* const>::value), "");
215    static_assert((!std::is_convertible<const Array&, Function*>::value), "");
216    static_assert((!std::is_convertible<const Array&, Function*const >::value), "");
217
218    static_assert((!std::is_convertible<Array&, Array>::value), "");
219    static_assert((!std::is_convertible<Array&, const Array>::value), "");
220    static_assert((!std::is_convertible<const Array&, Array>::value), "");
221    static_assert((!std::is_convertible<const Array&, const Array>::value), "");
222
223    static_assert(( std::is_convertible<Array&, Array&>::value), "");
224    static_assert(( std::is_convertible<Array&, const Array&>::value), "");
225    static_assert((!std::is_convertible<const Array&, Array&>::value), "");
226    static_assert(( std::is_convertible<const Array&, const Array&>::value), "");
227
228    static_assert((!std::is_convertible<Array&, char>::value), "");
229    static_assert((!std::is_convertible<Array&, const char>::value), "");
230    static_assert((!std::is_convertible<const Array&, char>::value), "");
231    static_assert((!std::is_convertible<const Array&, const char>::value), "");
232
233    static_assert((!std::is_convertible<Array&, char&>::value), "");
234    static_assert((!std::is_convertible<Array&, const char&>::value), "");
235    static_assert((!std::is_convertible<const Array&, char&>::value), "");
236    static_assert((!std::is_convertible<const Array&, const char&>::value), "");
237
238    static_assert(( std::is_convertible<Array&, char*>::value), "");
239    static_assert(( std::is_convertible<Array&, const char*>::value), "");
240    static_assert((!std::is_convertible<const Array&, char*>::value), "");
241    static_assert(( std::is_convertible<const Array&, const char*>::value), "");
242    }
243    {
244    static_assert((!std::is_convertible<char, void>::value), "");
245    static_assert((!std::is_convertible<const char, void>::value), "");
246    static_assert((!std::is_convertible<char, const void>::value), "");
247    static_assert((!std::is_convertible<const char, const void>::value), "");
248
249    static_assert((!std::is_convertible<char, Function>::value), "");
250    static_assert((!std::is_convertible<const char, Function>::value), "");
251
252    static_assert((!std::is_convertible<char, Function&>::value), "");
253    static_assert((!std::is_convertible<const char, Function&>::value), "");
254
255    static_assert((!std::is_convertible<char, Function*>::value), "");
256    static_assert((!std::is_convertible<char, Function* const>::value), "");
257    static_assert((!std::is_convertible<const char, Function*>::value), "");
258    static_assert((!std::is_convertible<const char, Function*const >::value), "");
259
260    static_assert((!std::is_convertible<char, Array>::value), "");
261    static_assert((!std::is_convertible<char, const Array>::value), "");
262    static_assert((!std::is_convertible<const char, Array>::value), "");
263    static_assert((!std::is_convertible<const char, const Array>::value), "");
264
265    static_assert((!std::is_convertible<char, Array&>::value), "");
266    static_assert((!std::is_convertible<char, const Array&>::value), "");
267    static_assert((!std::is_convertible<const char, Array&>::value), "");
268    static_assert((!std::is_convertible<const char, const Array&>::value), "");
269
270    static_assert(( std::is_convertible<char, char>::value), "");
271    static_assert(( std::is_convertible<char, const char>::value), "");
272    static_assert(( std::is_convertible<const char, char>::value), "");
273    static_assert(( std::is_convertible<const char, const char>::value), "");
274
275    static_assert((!std::is_convertible<char, char&>::value), "");
276    static_assert(( std::is_convertible<char, const char&>::value), "");
277    static_assert((!std::is_convertible<const char, char&>::value), "");
278    static_assert(( std::is_convertible<const char, const char&>::value), "");
279
280    static_assert((!std::is_convertible<char, char*>::value), "");
281    static_assert((!std::is_convertible<char, const char*>::value), "");
282    static_assert((!std::is_convertible<const char, char*>::value), "");
283    static_assert((!std::is_convertible<const char, const char*>::value), "");
284    }
285    {
286    static_assert((!std::is_convertible<char&, void>::value), "");
287    static_assert((!std::is_convertible<const char&, void>::value), "");
288    static_assert((!std::is_convertible<char&, const void>::value), "");
289    static_assert((!std::is_convertible<const char&, const void>::value), "");
290
291    static_assert((!std::is_convertible<char&, Function>::value), "");
292    static_assert((!std::is_convertible<const char&, Function>::value), "");
293
294    static_assert((!std::is_convertible<char&, Function&>::value), "");
295    static_assert((!std::is_convertible<const char&, Function&>::value), "");
296
297    static_assert((!std::is_convertible<char&, Function*>::value), "");
298    static_assert((!std::is_convertible<char&, Function* const>::value), "");
299    static_assert((!std::is_convertible<const char&, Function*>::value), "");
300    static_assert((!std::is_convertible<const char&, Function*const >::value), "");
301
302    static_assert((!std::is_convertible<char&, Array>::value), "");
303    static_assert((!std::is_convertible<char&, const Array>::value), "");
304    static_assert((!std::is_convertible<const char&, Array>::value), "");
305    static_assert((!std::is_convertible<const char&, const Array>::value), "");
306
307    static_assert((!std::is_convertible<char&, Array&>::value), "");
308    static_assert((!std::is_convertible<char&, const Array&>::value), "");
309    static_assert((!std::is_convertible<const char&, Array&>::value), "");
310    static_assert((!std::is_convertible<const char&, const Array&>::value), "");
311
312    static_assert(( std::is_convertible<char&, char>::value), "");
313    static_assert(( std::is_convertible<char&, const char>::value), "");
314    static_assert(( std::is_convertible<const char&, char>::value), "");
315    static_assert(( std::is_convertible<const char&, const char>::value), "");
316
317    static_assert(( std::is_convertible<char&, char&>::value), "");
318    static_assert(( std::is_convertible<char&, const char&>::value), "");
319    static_assert((!std::is_convertible<const char&, char&>::value), "");
320    static_assert(( std::is_convertible<const char&, const char&>::value), "");
321
322    static_assert((!std::is_convertible<char&, char*>::value), "");
323    static_assert((!std::is_convertible<char&, const char*>::value), "");
324    static_assert((!std::is_convertible<const char&, char*>::value), "");
325    static_assert((!std::is_convertible<const char&, const char*>::value), "");
326    }
327    {
328    static_assert((!std::is_convertible<char*, void>::value), "");
329    static_assert((!std::is_convertible<const char*, void>::value), "");
330    static_assert((!std::is_convertible<char*, const void>::value), "");
331    static_assert((!std::is_convertible<const char*, const void>::value), "");
332
333    static_assert((!std::is_convertible<char*, Function>::value), "");
334    static_assert((!std::is_convertible<const char*, Function>::value), "");
335
336    static_assert((!std::is_convertible<char*, Function&>::value), "");
337    static_assert((!std::is_convertible<const char*, Function&>::value), "");
338
339    static_assert((!std::is_convertible<char*, Function*>::value), "");
340    static_assert((!std::is_convertible<char*, Function* const>::value), "");
341    static_assert((!std::is_convertible<const char*, Function*>::value), "");
342    static_assert((!std::is_convertible<const char*, Function*const >::value), "");
343
344    static_assert((!std::is_convertible<char*, Array>::value), "");
345    static_assert((!std::is_convertible<char*, const Array>::value), "");
346    static_assert((!std::is_convertible<const char*, Array>::value), "");
347    static_assert((!std::is_convertible<const char*, const Array>::value), "");
348
349    static_assert((!std::is_convertible<char*, Array&>::value), "");
350    static_assert((!std::is_convertible<char*, const Array&>::value), "");
351    static_assert((!std::is_convertible<const char*, Array&>::value), "");
352    static_assert((!std::is_convertible<const char*, const Array&>::value), "");
353
354    static_assert((!std::is_convertible<char*, char>::value), "");
355    static_assert((!std::is_convertible<char*, const char>::value), "");
356    static_assert((!std::is_convertible<const char*, char>::value), "");
357    static_assert((!std::is_convertible<const char*, const char>::value), "");
358
359    static_assert((!std::is_convertible<char*, char&>::value), "");
360    static_assert((!std::is_convertible<char*, const char&>::value), "");
361    static_assert((!std::is_convertible<const char*, char&>::value), "");
362    static_assert((!std::is_convertible<const char*, const char&>::value), "");
363
364    static_assert(( std::is_convertible<char*, char*>::value), "");
365    static_assert(( std::is_convertible<char*, const char*>::value), "");
366    static_assert((!std::is_convertible<const char*, char*>::value), "");
367    static_assert(( std::is_convertible<const char*, const char*>::value), "");
368    }
369}
370