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