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