Home | History | Annotate | Download | only in SemaCXX
      1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=gnu++11 %s
      2 #define T(b) (b) ? 1 : -1
      3 #define F(b) (b) ? -1 : 1
      4 
      5 struct NonPOD { NonPOD(int); };
      6 
      7 // PODs
      8 enum Enum { EV };
      9 struct POD { Enum e; int i; float f; NonPOD* p; };
     10 struct Empty {};
     11 typedef Empty EmptyAr[10];
     12 typedef int Int;
     13 typedef Int IntAr[10];
     14 typedef Int IntArNB[];
     15 class Statics { static int priv; static NonPOD np; };
     16 union EmptyUnion {};
     17 union Union { int i; float f; };
     18 struct HasFunc { void f (); };
     19 struct HasOp { void operator *(); };
     20 struct HasConv { operator int(); };
     21 struct HasAssign { void operator =(int); };
     22 
     23 struct HasAnonymousUnion {
     24   union {
     25     int i;
     26     float f;
     27   };
     28 };
     29 
     30 typedef int Vector __attribute__((vector_size(16)));
     31 typedef int VectorExt __attribute__((ext_vector_type(4)));
     32 
     33 // Not PODs
     34 typedef const void cvoid;
     35 struct Derives : POD {};
     36 typedef Derives DerivesAr[10];
     37 typedef Derives DerivesArNB[];
     38 struct DerivesEmpty : Empty {};
     39 struct HasCons { HasCons(int); };
     40 struct HasCopyAssign { HasCopyAssign operator =(const HasCopyAssign&); };
     41 struct HasMoveAssign { HasMoveAssign operator =(const HasMoveAssign&&); };
     42 struct HasDest { ~HasDest(); };
     43 class  HasPriv { int priv; };
     44 class  HasProt { protected: int prot; };
     45 struct HasRef { int i; int& ref; HasRef() : i(0), ref(i) {} };
     46 struct HasNonPOD { NonPOD np; };
     47 struct HasVirt { virtual void Virt() {}; };
     48 typedef NonPOD NonPODAr[10];
     49 typedef HasVirt VirtAr[10];
     50 typedef NonPOD NonPODArNB[];
     51 union NonPODUnion { int i; Derives n; };
     52 struct DerivesHasCons : HasCons {};
     53 struct DerivesHasCopyAssign : HasCopyAssign {};
     54 struct DerivesHasMoveAssign : HasMoveAssign {};
     55 struct DerivesHasDest : HasDest {};
     56 struct DerivesHasPriv : HasPriv {};
     57 struct DerivesHasProt : HasProt {};
     58 struct DerivesHasRef : HasRef {};
     59 struct DerivesHasVirt : HasVirt {};
     60 
     61 struct HasNoThrowCopyAssign {
     62   void operator =(const HasNoThrowCopyAssign&) throw();
     63 };
     64 struct HasMultipleCopyAssign {
     65   void operator =(const HasMultipleCopyAssign&) throw();
     66   void operator =(volatile HasMultipleCopyAssign&);
     67 };
     68 struct HasMultipleNoThrowCopyAssign {
     69   void operator =(const HasMultipleNoThrowCopyAssign&) throw();
     70   void operator =(volatile HasMultipleNoThrowCopyAssign&) throw();
     71 };
     72 
     73 struct HasNoThrowConstructor { HasNoThrowConstructor() throw(); };
     74 struct HasNoThrowConstructorWithArgs {
     75   HasNoThrowConstructorWithArgs(HasCons i = HasCons(0)) throw();
     76 };
     77 
     78 struct HasNoThrowCopy { HasNoThrowCopy(const HasNoThrowCopy&) throw(); };
     79 struct HasMultipleCopy {
     80   HasMultipleCopy(const HasMultipleCopy&) throw();
     81   HasMultipleCopy(volatile HasMultipleCopy&);
     82 };
     83 struct HasMultipleNoThrowCopy {
     84   HasMultipleNoThrowCopy(const HasMultipleNoThrowCopy&) throw();
     85   HasMultipleNoThrowCopy(volatile HasMultipleNoThrowCopy&) throw();
     86 };
     87 
     88 struct HasVirtDest { virtual ~HasVirtDest(); };
     89 struct DerivedVirtDest : HasVirtDest {};
     90 typedef HasVirtDest VirtDestAr[1];
     91 
     92 class AllPrivate {
     93   AllPrivate() throw();
     94   AllPrivate(const AllPrivate&) throw();
     95   AllPrivate &operator=(const AllPrivate &) throw();
     96   ~AllPrivate() throw();
     97 };
     98 
     99 void is_pod()
    100 {
    101   { int arr[T(__is_pod(int))]; }
    102   { int arr[T(__is_pod(Enum))]; }
    103   { int arr[T(__is_pod(POD))]; }
    104   { int arr[T(__is_pod(Int))]; }
    105   { int arr[T(__is_pod(IntAr))]; }
    106   { int arr[T(__is_pod(Statics))]; }
    107   { int arr[T(__is_pod(Empty))]; }
    108   { int arr[T(__is_pod(EmptyUnion))]; }
    109   { int arr[T(__is_pod(Union))]; }
    110   { int arr[T(__is_pod(HasFunc))]; }
    111   { int arr[T(__is_pod(HasOp))]; }
    112   { int arr[T(__is_pod(HasConv))]; }
    113   { int arr[T(__is_pod(HasAssign))]; }
    114   { int arr[T(__is_pod(IntArNB))]; }
    115   { int arr[T(__is_pod(HasAnonymousUnion))]; }
    116   { int arr[T(__is_pod(Vector))]; }
    117   { int arr[T(__is_pod(VectorExt))]; }
    118 
    119   { int arr[F(__is_pod(Derives))]; }
    120   { int arr[F(__is_pod(DerivesAr))]; }
    121   { int arr[F(__is_pod(DerivesArNB))]; }
    122   { int arr[F(__is_pod(DerivesEmpty))]; }
    123   { int arr[F(__is_pod(HasCons))]; }
    124   { int arr[F(__is_pod(HasCopyAssign))]; }
    125   { int arr[F(__is_pod(HasMoveAssign))]; }
    126   { int arr[F(__is_pod(HasDest))]; }
    127   { int arr[F(__is_pod(HasPriv))]; }
    128   { int arr[F(__is_pod(HasProt))]; }
    129   { int arr[F(__is_pod(HasRef))]; }
    130   { int arr[F(__is_pod(HasVirt))]; }
    131   { int arr[F(__is_pod(DerivesHasCons))]; }
    132   { int arr[F(__is_pod(DerivesHasCopyAssign))]; }
    133   { int arr[F(__is_pod(DerivesHasMoveAssign))]; }
    134   { int arr[F(__is_pod(DerivesHasDest))]; }
    135   { int arr[F(__is_pod(DerivesHasPriv))]; }
    136   { int arr[F(__is_pod(DerivesHasProt))]; }
    137   { int arr[F(__is_pod(DerivesHasRef))]; }
    138   { int arr[F(__is_pod(DerivesHasVirt))]; }
    139   { int arr[F(__is_pod(NonPOD))]; }
    140   { int arr[F(__is_pod(HasNonPOD))]; }
    141   { int arr[F(__is_pod(NonPODAr))]; }
    142   { int arr[F(__is_pod(NonPODArNB))]; }
    143   { int arr[F(__is_pod(void))]; }
    144   { int arr[F(__is_pod(cvoid))]; }
    145 // { int arr[F(__is_pod(NonPODUnion))]; }
    146 }
    147 
    148 typedef Empty EmptyAr[10];
    149 struct Bit0 { int : 0; };
    150 struct Bit0Cons { int : 0; Bit0Cons(); };
    151 struct BitOnly { int x : 3; };
    152 //struct DerivesVirt : virtual POD {};
    153 
    154 void is_empty()
    155 {
    156   { int arr[T(__is_empty(Empty))]; }
    157   { int arr[T(__is_empty(DerivesEmpty))]; }
    158   { int arr[T(__is_empty(HasCons))]; }
    159   { int arr[T(__is_empty(HasCopyAssign))]; }
    160   { int arr[T(__is_empty(HasMoveAssign))]; }
    161   { int arr[T(__is_empty(HasDest))]; }
    162   { int arr[T(__is_empty(HasFunc))]; }
    163   { int arr[T(__is_empty(HasOp))]; }
    164   { int arr[T(__is_empty(HasConv))]; }
    165   { int arr[T(__is_empty(HasAssign))]; }
    166   { int arr[T(__is_empty(Bit0))]; }
    167   { int arr[T(__is_empty(Bit0Cons))]; }
    168 
    169   { int arr[F(__is_empty(Int))]; }
    170   { int arr[F(__is_empty(POD))]; }
    171   { int arr[F(__is_empty(EmptyUnion))]; }
    172   { int arr[F(__is_empty(EmptyAr))]; }
    173   { int arr[F(__is_empty(HasRef))]; }
    174   { int arr[F(__is_empty(HasVirt))]; }
    175   { int arr[F(__is_empty(BitOnly))]; }
    176   { int arr[F(__is_empty(void))]; }
    177   { int arr[F(__is_empty(IntArNB))]; }
    178   { int arr[F(__is_empty(HasAnonymousUnion))]; }
    179 //  { int arr[F(__is_empty(DerivesVirt))]; }
    180 }
    181 
    182 typedef Derives ClassType;
    183 
    184 void is_class()
    185 {
    186   { int arr[T(__is_class(Derives))]; }
    187   { int arr[T(__is_class(HasPriv))]; }
    188   { int arr[T(__is_class(ClassType))]; }
    189   { int arr[T(__is_class(HasAnonymousUnion))]; }
    190 
    191   { int arr[F(__is_class(int))]; }
    192   { int arr[F(__is_class(Enum))]; }
    193   { int arr[F(__is_class(Int))]; }
    194   { int arr[F(__is_class(IntAr))]; }
    195   { int arr[F(__is_class(DerivesAr))]; }
    196   { int arr[F(__is_class(Union))]; }
    197   { int arr[F(__is_class(cvoid))]; }
    198   { int arr[F(__is_class(IntArNB))]; }
    199 }
    200 
    201 typedef Union UnionAr[10];
    202 typedef Union UnionType;
    203 
    204 void is_union()
    205 {
    206   { int arr[T(__is_union(Union))]; }
    207   { int arr[T(__is_union(UnionType))]; }
    208 
    209   { int arr[F(__is_union(int))]; }
    210   { int arr[F(__is_union(Enum))]; }
    211   { int arr[F(__is_union(Int))]; }
    212   { int arr[F(__is_union(IntAr))]; }
    213   { int arr[F(__is_union(UnionAr))]; }
    214   { int arr[F(__is_union(cvoid))]; }
    215   { int arr[F(__is_union(IntArNB))]; }
    216   { int arr[F(__is_union(HasAnonymousUnion))]; }
    217 }
    218 
    219 typedef Enum EnumType;
    220 
    221 void is_enum()
    222 {
    223   { int arr[T(__is_enum(Enum))]; }
    224   { int arr[T(__is_enum(EnumType))]; }
    225 
    226   { int arr[F(__is_enum(int))]; }
    227   { int arr[F(__is_enum(Union))]; }
    228   { int arr[F(__is_enum(Int))]; }
    229   { int arr[F(__is_enum(IntAr))]; }
    230   { int arr[F(__is_enum(UnionAr))]; }
    231   { int arr[F(__is_enum(Derives))]; }
    232   { int arr[F(__is_enum(ClassType))]; }
    233   { int arr[F(__is_enum(cvoid))]; }
    234   { int arr[F(__is_enum(IntArNB))]; }
    235   { int arr[F(__is_enum(HasAnonymousUnion))]; }
    236 }
    237 
    238 typedef HasVirt Polymorph;
    239 struct InheritPolymorph : Polymorph {};
    240 
    241 void is_polymorphic()
    242 {
    243   { int arr[T(__is_polymorphic(Polymorph))]; }
    244   { int arr[T(__is_polymorphic(InheritPolymorph))]; }
    245 
    246   { int arr[F(__is_polymorphic(int))]; }
    247   { int arr[F(__is_polymorphic(Union))]; }
    248   { int arr[F(__is_polymorphic(Int))]; }
    249   { int arr[F(__is_polymorphic(IntAr))]; }
    250   { int arr[F(__is_polymorphic(UnionAr))]; }
    251   { int arr[F(__is_polymorphic(Derives))]; }
    252   { int arr[F(__is_polymorphic(ClassType))]; }
    253   { int arr[F(__is_polymorphic(Enum))]; }
    254   { int arr[F(__is_polymorphic(cvoid))]; }
    255   { int arr[F(__is_polymorphic(IntArNB))]; }
    256 }
    257 
    258 void is_integral()
    259 {
    260   int t01[T(__is_integral(bool))];
    261   int t02[T(__is_integral(char))];
    262   int t03[T(__is_integral(signed char))];
    263   int t04[T(__is_integral(unsigned char))];
    264   //int t05[T(__is_integral(char16_t))];
    265   //int t06[T(__is_integral(char32_t))];
    266   int t07[T(__is_integral(wchar_t))];
    267   int t08[T(__is_integral(short))];
    268   int t09[T(__is_integral(unsigned short))];
    269   int t10[T(__is_integral(int))];
    270   int t11[T(__is_integral(unsigned int))];
    271   int t12[T(__is_integral(long))];
    272   int t13[T(__is_integral(unsigned long))];
    273 
    274   int t21[F(__is_integral(float))];
    275   int t22[F(__is_integral(double))];
    276   int t23[F(__is_integral(long double))];
    277   int t24[F(__is_integral(Union))];
    278   int t25[F(__is_integral(UnionAr))];
    279   int t26[F(__is_integral(Derives))];
    280   int t27[F(__is_integral(ClassType))];
    281   int t28[F(__is_integral(Enum))];
    282   int t29[F(__is_integral(void))];
    283   int t30[F(__is_integral(cvoid))];
    284   int t31[F(__is_integral(IntArNB))];
    285 }
    286 
    287 void is_floating_point()
    288 {
    289   int t01[T(__is_floating_point(float))];
    290   int t02[T(__is_floating_point(double))];
    291   int t03[T(__is_floating_point(long double))];
    292 
    293   int t11[F(__is_floating_point(bool))];
    294   int t12[F(__is_floating_point(char))];
    295   int t13[F(__is_floating_point(signed char))];
    296   int t14[F(__is_floating_point(unsigned char))];
    297   //int t15[F(__is_floating_point(char16_t))];
    298   //int t16[F(__is_floating_point(char32_t))];
    299   int t17[F(__is_floating_point(wchar_t))];
    300   int t18[F(__is_floating_point(short))];
    301   int t19[F(__is_floating_point(unsigned short))];
    302   int t20[F(__is_floating_point(int))];
    303   int t21[F(__is_floating_point(unsigned int))];
    304   int t22[F(__is_floating_point(long))];
    305   int t23[F(__is_floating_point(unsigned long))];
    306   int t24[F(__is_floating_point(Union))];
    307   int t25[F(__is_floating_point(UnionAr))];
    308   int t26[F(__is_floating_point(Derives))];
    309   int t27[F(__is_floating_point(ClassType))];
    310   int t28[F(__is_floating_point(Enum))];
    311   int t29[F(__is_floating_point(void))];
    312   int t30[F(__is_floating_point(cvoid))];
    313   int t31[F(__is_floating_point(IntArNB))];
    314 }
    315 
    316 void is_arithmetic()
    317 {
    318   int t01[T(__is_arithmetic(float))];
    319   int t02[T(__is_arithmetic(double))];
    320   int t03[T(__is_arithmetic(long double))];
    321   int t11[T(__is_arithmetic(bool))];
    322   int t12[T(__is_arithmetic(char))];
    323   int t13[T(__is_arithmetic(signed char))];
    324   int t14[T(__is_arithmetic(unsigned char))];
    325   //int t15[T(__is_arithmetic(char16_t))];
    326   //int t16[T(__is_arithmetic(char32_t))];
    327   int t17[T(__is_arithmetic(wchar_t))];
    328   int t18[T(__is_arithmetic(short))];
    329   int t19[T(__is_arithmetic(unsigned short))];
    330   int t20[T(__is_arithmetic(int))];
    331   int t21[T(__is_arithmetic(unsigned int))];
    332   int t22[T(__is_arithmetic(long))];
    333   int t23[T(__is_arithmetic(unsigned long))];
    334 
    335   int t24[F(__is_arithmetic(Union))];
    336   int t25[F(__is_arithmetic(UnionAr))];
    337   int t26[F(__is_arithmetic(Derives))];
    338   int t27[F(__is_arithmetic(ClassType))];
    339   int t28[F(__is_arithmetic(Enum))];
    340   int t29[F(__is_arithmetic(void))];
    341   int t30[F(__is_arithmetic(cvoid))];
    342   int t31[F(__is_arithmetic(IntArNB))];
    343 }
    344 
    345 struct ACompleteType {};
    346 struct AnIncompleteType;
    347 
    348 void is_complete_type()
    349 {
    350   int t01[T(__is_complete_type(float))];
    351   int t02[T(__is_complete_type(double))];
    352   int t03[T(__is_complete_type(long double))];
    353   int t11[T(__is_complete_type(bool))];
    354   int t12[T(__is_complete_type(char))];
    355   int t13[T(__is_complete_type(signed char))];
    356   int t14[T(__is_complete_type(unsigned char))];
    357   //int t15[T(__is_complete_type(char16_t))];
    358   //int t16[T(__is_complete_type(char32_t))];
    359   int t17[T(__is_complete_type(wchar_t))];
    360   int t18[T(__is_complete_type(short))];
    361   int t19[T(__is_complete_type(unsigned short))];
    362   int t20[T(__is_complete_type(int))];
    363   int t21[T(__is_complete_type(unsigned int))];
    364   int t22[T(__is_complete_type(long))];
    365   int t23[T(__is_complete_type(unsigned long))];
    366   int t24[T(__is_complete_type(ACompleteType))];
    367 
    368   int t30[F(__is_complete_type(AnIncompleteType))];
    369 }
    370 
    371 void is_void()
    372 {
    373   int t01[T(__is_void(void))];
    374   int t02[T(__is_void(cvoid))];
    375 
    376   int t10[F(__is_void(float))];
    377   int t11[F(__is_void(double))];
    378   int t12[F(__is_void(long double))];
    379   int t13[F(__is_void(bool))];
    380   int t14[F(__is_void(char))];
    381   int t15[F(__is_void(signed char))];
    382   int t16[F(__is_void(unsigned char))];
    383   int t17[F(__is_void(wchar_t))];
    384   int t18[F(__is_void(short))];
    385   int t19[F(__is_void(unsigned short))];
    386   int t20[F(__is_void(int))];
    387   int t21[F(__is_void(unsigned int))];
    388   int t22[F(__is_void(long))];
    389   int t23[F(__is_void(unsigned long))];
    390   int t24[F(__is_void(Union))];
    391   int t25[F(__is_void(UnionAr))];
    392   int t26[F(__is_void(Derives))];
    393   int t27[F(__is_void(ClassType))];
    394   int t28[F(__is_void(Enum))];
    395   int t29[F(__is_void(IntArNB))];
    396   int t30[F(__is_void(void*))];
    397   int t31[F(__is_void(cvoid*))];
    398 }
    399 
    400 void is_array()
    401 {
    402   int t01[T(__is_array(IntAr))];
    403   int t02[T(__is_array(IntArNB))];
    404   int t03[T(__is_array(UnionAr))];
    405 
    406   int t10[F(__is_array(void))];
    407   int t11[F(__is_array(cvoid))];
    408   int t12[F(__is_array(float))];
    409   int t13[F(__is_array(double))];
    410   int t14[F(__is_array(long double))];
    411   int t15[F(__is_array(bool))];
    412   int t16[F(__is_array(char))];
    413   int t17[F(__is_array(signed char))];
    414   int t18[F(__is_array(unsigned char))];
    415   int t19[F(__is_array(wchar_t))];
    416   int t20[F(__is_array(short))];
    417   int t21[F(__is_array(unsigned short))];
    418   int t22[F(__is_array(int))];
    419   int t23[F(__is_array(unsigned int))];
    420   int t24[F(__is_array(long))];
    421   int t25[F(__is_array(unsigned long))];
    422   int t26[F(__is_array(Union))];
    423   int t27[F(__is_array(Derives))];
    424   int t28[F(__is_array(ClassType))];
    425   int t29[F(__is_array(Enum))];
    426   int t30[F(__is_array(void*))];
    427   int t31[F(__is_array(cvoid*))];
    428 }
    429 
    430 template <typename T> void tmpl_func(T&) {}
    431 
    432 template <typename T> struct type_wrapper {
    433   typedef T type;
    434   typedef T* ptrtype;
    435   typedef T& reftype;
    436 };
    437 
    438 void is_function()
    439 {
    440   int t01[T(__is_function(type_wrapper<void(void)>::type))];
    441   int t02[T(__is_function(typeof(tmpl_func<int>)))];
    442 
    443   typedef void (*ptr_to_func_type)(void);
    444 
    445   int t10[F(__is_function(void))];
    446   int t11[F(__is_function(cvoid))];
    447   int t12[F(__is_function(float))];
    448   int t13[F(__is_function(double))];
    449   int t14[F(__is_function(long double))];
    450   int t15[F(__is_function(bool))];
    451   int t16[F(__is_function(char))];
    452   int t17[F(__is_function(signed char))];
    453   int t18[F(__is_function(unsigned char))];
    454   int t19[F(__is_function(wchar_t))];
    455   int t20[F(__is_function(short))];
    456   int t21[F(__is_function(unsigned short))];
    457   int t22[F(__is_function(int))];
    458   int t23[F(__is_function(unsigned int))];
    459   int t24[F(__is_function(long))];
    460   int t25[F(__is_function(unsigned long))];
    461   int t26[F(__is_function(Union))];
    462   int t27[F(__is_function(Derives))];
    463   int t28[F(__is_function(ClassType))];
    464   int t29[F(__is_function(Enum))];
    465   int t30[F(__is_function(void*))];
    466   int t31[F(__is_function(cvoid*))];
    467   int t32[F(__is_function(void(*)()))];
    468   int t33[F(__is_function(ptr_to_func_type))];
    469   int t34[F(__is_function(type_wrapper<void(void)>::ptrtype))];
    470   int t35[F(__is_function(type_wrapper<void(void)>::reftype))];
    471 }
    472 
    473 void is_reference()
    474 {
    475   int t01[T(__is_reference(int&))];
    476   int t02[T(__is_reference(const int&))];
    477   int t03[T(__is_reference(void *&))];
    478 
    479   int t10[F(__is_reference(int))];
    480   int t11[F(__is_reference(const int))];
    481   int t12[F(__is_reference(void *))];
    482 }
    483 
    484 void is_lvalue_reference()
    485 {
    486   int t01[T(__is_lvalue_reference(int&))];
    487   int t02[T(__is_lvalue_reference(void *&))];
    488   int t03[T(__is_lvalue_reference(const int&))];
    489   int t04[T(__is_lvalue_reference(void * const &))];
    490 
    491   int t10[F(__is_lvalue_reference(int))];
    492   int t11[F(__is_lvalue_reference(const int))];
    493   int t12[F(__is_lvalue_reference(void *))];
    494 }
    495 
    496 #if __has_feature(cxx_rvalue_references)
    497 
    498 void is_rvalue_reference()
    499 {
    500   int t01[T(__is_rvalue_reference(const int&&))];
    501   int t02[T(__is_rvalue_reference(void * const &&))];
    502 
    503   int t10[F(__is_rvalue_reference(int&))];
    504   int t11[F(__is_rvalue_reference(void *&))];
    505   int t12[F(__is_rvalue_reference(const int&))];
    506   int t13[F(__is_rvalue_reference(void * const &))];
    507   int t14[F(__is_rvalue_reference(int))];
    508   int t15[F(__is_rvalue_reference(const int))];
    509   int t16[F(__is_rvalue_reference(void *))];
    510 }
    511 
    512 #endif
    513 
    514 void is_fundamental()
    515 {
    516   int t01[T(__is_fundamental(float))];
    517   int t02[T(__is_fundamental(double))];
    518   int t03[T(__is_fundamental(long double))];
    519   int t11[T(__is_fundamental(bool))];
    520   int t12[T(__is_fundamental(char))];
    521   int t13[T(__is_fundamental(signed char))];
    522   int t14[T(__is_fundamental(unsigned char))];
    523   //int t15[T(__is_fundamental(char16_t))];
    524   //int t16[T(__is_fundamental(char32_t))];
    525   int t17[T(__is_fundamental(wchar_t))];
    526   int t18[T(__is_fundamental(short))];
    527   int t19[T(__is_fundamental(unsigned short))];
    528   int t20[T(__is_fundamental(int))];
    529   int t21[T(__is_fundamental(unsigned int))];
    530   int t22[T(__is_fundamental(long))];
    531   int t23[T(__is_fundamental(unsigned long))];
    532   int t24[T(__is_fundamental(void))];
    533   int t25[T(__is_fundamental(cvoid))];
    534 
    535   int t30[F(__is_fundamental(Union))];
    536   int t31[F(__is_fundamental(UnionAr))];
    537   int t32[F(__is_fundamental(Derives))];
    538   int t33[F(__is_fundamental(ClassType))];
    539   int t34[F(__is_fundamental(Enum))];
    540   int t35[F(__is_fundamental(IntArNB))];
    541 }
    542 
    543 void is_object()
    544 {
    545   int t01[T(__is_object(int))];
    546   int t02[T(__is_object(int *))];
    547   int t03[T(__is_object(void *))];
    548   int t04[T(__is_object(Union))];
    549   int t05[T(__is_object(UnionAr))];
    550   int t06[T(__is_object(ClassType))];
    551   int t07[T(__is_object(Enum))];
    552 
    553   int t10[F(__is_object(type_wrapper<void(void)>::type))];
    554   int t11[F(__is_object(int&))];
    555   int t12[F(__is_object(void))];
    556 }
    557 
    558 void is_scalar()
    559 {
    560   int t01[T(__is_scalar(float))];
    561   int t02[T(__is_scalar(double))];
    562   int t03[T(__is_scalar(long double))];
    563   int t04[T(__is_scalar(bool))];
    564   int t05[T(__is_scalar(char))];
    565   int t06[T(__is_scalar(signed char))];
    566   int t07[T(__is_scalar(unsigned char))];
    567   int t08[T(__is_scalar(wchar_t))];
    568   int t09[T(__is_scalar(short))];
    569   int t10[T(__is_scalar(unsigned short))];
    570   int t11[T(__is_scalar(int))];
    571   int t12[T(__is_scalar(unsigned int))];
    572   int t13[T(__is_scalar(long))];
    573   int t14[T(__is_scalar(unsigned long))];
    574   int t15[T(__is_scalar(Enum))];
    575   int t16[T(__is_scalar(void*))];
    576   int t17[T(__is_scalar(cvoid*))];
    577 
    578   int t20[F(__is_scalar(void))];
    579   int t21[F(__is_scalar(cvoid))];
    580   int t22[F(__is_scalar(Union))];
    581   int t23[F(__is_scalar(UnionAr))];
    582   int t24[F(__is_scalar(Derives))];
    583   int t25[F(__is_scalar(ClassType))];
    584   int t26[F(__is_scalar(IntArNB))];
    585 }
    586 
    587 struct StructWithMembers {
    588   int member;
    589   void method() {}
    590 };
    591 
    592 void is_compound()
    593 {
    594   int t01[T(__is_compound(void*))];
    595   int t02[T(__is_compound(cvoid*))];
    596   int t03[T(__is_compound(void (*)()))];
    597   int t04[T(__is_compound(int StructWithMembers::*))];
    598   int t05[T(__is_compound(void (StructWithMembers::*)()))];
    599   int t06[T(__is_compound(int&))];
    600   int t07[T(__is_compound(Union))];
    601   int t08[T(__is_compound(UnionAr))];
    602   int t09[T(__is_compound(Derives))];
    603   int t10[T(__is_compound(ClassType))];
    604   int t11[T(__is_compound(IntArNB))];
    605   int t12[T(__is_compound(Enum))];
    606 
    607   int t20[F(__is_compound(float))];
    608   int t21[F(__is_compound(double))];
    609   int t22[F(__is_compound(long double))];
    610   int t23[F(__is_compound(bool))];
    611   int t24[F(__is_compound(char))];
    612   int t25[F(__is_compound(signed char))];
    613   int t26[F(__is_compound(unsigned char))];
    614   int t27[F(__is_compound(wchar_t))];
    615   int t28[F(__is_compound(short))];
    616   int t29[F(__is_compound(unsigned short))];
    617   int t30[F(__is_compound(int))];
    618   int t31[F(__is_compound(unsigned int))];
    619   int t32[F(__is_compound(long))];
    620   int t33[F(__is_compound(unsigned long))];
    621   int t34[F(__is_compound(void))];
    622   int t35[F(__is_compound(cvoid))];
    623 }
    624 
    625 void is_pointer()
    626 {
    627   StructWithMembers x;
    628 
    629   int t01[T(__is_pointer(void*))];
    630   int t02[T(__is_pointer(cvoid*))];
    631   int t03[T(__is_pointer(cvoid*))];
    632   int t04[T(__is_pointer(char*))];
    633   int t05[T(__is_pointer(int*))];
    634   int t06[T(__is_pointer(int**))];
    635   int t07[T(__is_pointer(ClassType*))];
    636   int t08[T(__is_pointer(Derives*))];
    637   int t09[T(__is_pointer(Enum*))];
    638   int t10[T(__is_pointer(IntArNB*))];
    639   int t11[T(__is_pointer(Union*))];
    640   int t12[T(__is_pointer(UnionAr*))];
    641   int t13[T(__is_pointer(StructWithMembers*))];
    642   int t14[T(__is_pointer(void (*)()))];
    643 
    644   int t20[F(__is_pointer(void))];
    645   int t21[F(__is_pointer(cvoid))];
    646   int t22[F(__is_pointer(cvoid))];
    647   int t23[F(__is_pointer(char))];
    648   int t24[F(__is_pointer(int))];
    649   int t25[F(__is_pointer(int))];
    650   int t26[F(__is_pointer(ClassType))];
    651   int t27[F(__is_pointer(Derives))];
    652   int t28[F(__is_pointer(Enum))];
    653   int t29[F(__is_pointer(IntArNB))];
    654   int t30[F(__is_pointer(Union))];
    655   int t31[F(__is_pointer(UnionAr))];
    656   int t32[F(__is_pointer(StructWithMembers))];
    657   int t33[F(__is_pointer(int StructWithMembers::*))];
    658   int t34[F(__is_pointer(void (StructWithMembers::*) ()))];
    659 }
    660 
    661 void is_member_object_pointer()
    662 {
    663   StructWithMembers x;
    664 
    665   int t01[T(__is_member_object_pointer(int StructWithMembers::*))];
    666 
    667   int t10[F(__is_member_object_pointer(void (StructWithMembers::*) ()))];
    668   int t11[F(__is_member_object_pointer(void*))];
    669   int t12[F(__is_member_object_pointer(cvoid*))];
    670   int t13[F(__is_member_object_pointer(cvoid*))];
    671   int t14[F(__is_member_object_pointer(char*))];
    672   int t15[F(__is_member_object_pointer(int*))];
    673   int t16[F(__is_member_object_pointer(int**))];
    674   int t17[F(__is_member_object_pointer(ClassType*))];
    675   int t18[F(__is_member_object_pointer(Derives*))];
    676   int t19[F(__is_member_object_pointer(Enum*))];
    677   int t20[F(__is_member_object_pointer(IntArNB*))];
    678   int t21[F(__is_member_object_pointer(Union*))];
    679   int t22[F(__is_member_object_pointer(UnionAr*))];
    680   int t23[F(__is_member_object_pointer(StructWithMembers*))];
    681   int t24[F(__is_member_object_pointer(void))];
    682   int t25[F(__is_member_object_pointer(cvoid))];
    683   int t26[F(__is_member_object_pointer(cvoid))];
    684   int t27[F(__is_member_object_pointer(char))];
    685   int t28[F(__is_member_object_pointer(int))];
    686   int t29[F(__is_member_object_pointer(int))];
    687   int t30[F(__is_member_object_pointer(ClassType))];
    688   int t31[F(__is_member_object_pointer(Derives))];
    689   int t32[F(__is_member_object_pointer(Enum))];
    690   int t33[F(__is_member_object_pointer(IntArNB))];
    691   int t34[F(__is_member_object_pointer(Union))];
    692   int t35[F(__is_member_object_pointer(UnionAr))];
    693   int t36[F(__is_member_object_pointer(StructWithMembers))];
    694   int t37[F(__is_member_object_pointer(void (*)()))];
    695 }
    696 
    697 void is_member_function_pointer()
    698 {
    699   StructWithMembers x;
    700 
    701   int t01[T(__is_member_function_pointer(void (StructWithMembers::*) ()))];
    702 
    703   int t10[F(__is_member_function_pointer(int StructWithMembers::*))];
    704   int t11[F(__is_member_function_pointer(void*))];
    705   int t12[F(__is_member_function_pointer(cvoid*))];
    706   int t13[F(__is_member_function_pointer(cvoid*))];
    707   int t14[F(__is_member_function_pointer(char*))];
    708   int t15[F(__is_member_function_pointer(int*))];
    709   int t16[F(__is_member_function_pointer(int**))];
    710   int t17[F(__is_member_function_pointer(ClassType*))];
    711   int t18[F(__is_member_function_pointer(Derives*))];
    712   int t19[F(__is_member_function_pointer(Enum*))];
    713   int t20[F(__is_member_function_pointer(IntArNB*))];
    714   int t21[F(__is_member_function_pointer(Union*))];
    715   int t22[F(__is_member_function_pointer(UnionAr*))];
    716   int t23[F(__is_member_function_pointer(StructWithMembers*))];
    717   int t24[F(__is_member_function_pointer(void))];
    718   int t25[F(__is_member_function_pointer(cvoid))];
    719   int t26[F(__is_member_function_pointer(cvoid))];
    720   int t27[F(__is_member_function_pointer(char))];
    721   int t28[F(__is_member_function_pointer(int))];
    722   int t29[F(__is_member_function_pointer(int))];
    723   int t30[F(__is_member_function_pointer(ClassType))];
    724   int t31[F(__is_member_function_pointer(Derives))];
    725   int t32[F(__is_member_function_pointer(Enum))];
    726   int t33[F(__is_member_function_pointer(IntArNB))];
    727   int t34[F(__is_member_function_pointer(Union))];
    728   int t35[F(__is_member_function_pointer(UnionAr))];
    729   int t36[F(__is_member_function_pointer(StructWithMembers))];
    730   int t37[F(__is_member_function_pointer(void (*)()))];
    731 }
    732 
    733 void is_member_pointer()
    734 {
    735   StructWithMembers x;
    736 
    737   int t01[T(__is_member_pointer(int StructWithMembers::*))];
    738   int t02[T(__is_member_pointer(void (StructWithMembers::*) ()))];
    739 
    740   int t10[F(__is_member_pointer(void*))];
    741   int t11[F(__is_member_pointer(cvoid*))];
    742   int t12[F(__is_member_pointer(cvoid*))];
    743   int t13[F(__is_member_pointer(char*))];
    744   int t14[F(__is_member_pointer(int*))];
    745   int t15[F(__is_member_pointer(int**))];
    746   int t16[F(__is_member_pointer(ClassType*))];
    747   int t17[F(__is_member_pointer(Derives*))];
    748   int t18[F(__is_member_pointer(Enum*))];
    749   int t19[F(__is_member_pointer(IntArNB*))];
    750   int t20[F(__is_member_pointer(Union*))];
    751   int t21[F(__is_member_pointer(UnionAr*))];
    752   int t22[F(__is_member_pointer(StructWithMembers*))];
    753   int t23[F(__is_member_pointer(void))];
    754   int t24[F(__is_member_pointer(cvoid))];
    755   int t25[F(__is_member_pointer(cvoid))];
    756   int t26[F(__is_member_pointer(char))];
    757   int t27[F(__is_member_pointer(int))];
    758   int t28[F(__is_member_pointer(int))];
    759   int t29[F(__is_member_pointer(ClassType))];
    760   int t30[F(__is_member_pointer(Derives))];
    761   int t31[F(__is_member_pointer(Enum))];
    762   int t32[F(__is_member_pointer(IntArNB))];
    763   int t33[F(__is_member_pointer(Union))];
    764   int t34[F(__is_member_pointer(UnionAr))];
    765   int t35[F(__is_member_pointer(StructWithMembers))];
    766   int t36[F(__is_member_pointer(void (*)()))];
    767 }
    768 
    769 void is_const()
    770 {
    771   int t01[T(__is_const(cvoid))];
    772   int t02[T(__is_const(const char))];
    773   int t03[T(__is_const(const int))];
    774   int t04[T(__is_const(const long))];
    775   int t05[T(__is_const(const short))];
    776   int t06[T(__is_const(const signed char))];
    777   int t07[T(__is_const(const wchar_t))];
    778   int t08[T(__is_const(const bool))];
    779   int t09[T(__is_const(const float))];
    780   int t10[T(__is_const(const double))];
    781   int t11[T(__is_const(const long double))];
    782   int t12[T(__is_const(const unsigned char))];
    783   int t13[T(__is_const(const unsigned int))];
    784   int t14[T(__is_const(const unsigned long long))];
    785   int t15[T(__is_const(const unsigned long))];
    786   int t16[T(__is_const(const unsigned short))];
    787   int t17[T(__is_const(const void))];
    788   int t18[T(__is_const(const ClassType))];
    789   int t19[T(__is_const(const Derives))];
    790   int t20[T(__is_const(const Enum))];
    791   int t21[T(__is_const(const IntArNB))];
    792   int t22[T(__is_const(const Union))];
    793   int t23[T(__is_const(const UnionAr))];
    794 
    795   int t30[F(__is_const(char))];
    796   int t31[F(__is_const(int))];
    797   int t32[F(__is_const(long))];
    798   int t33[F(__is_const(short))];
    799   int t34[F(__is_const(signed char))];
    800   int t35[F(__is_const(wchar_t))];
    801   int t36[F(__is_const(bool))];
    802   int t37[F(__is_const(float))];
    803   int t38[F(__is_const(double))];
    804   int t39[F(__is_const(long double))];
    805   int t40[F(__is_const(unsigned char))];
    806   int t41[F(__is_const(unsigned int))];
    807   int t42[F(__is_const(unsigned long long))];
    808   int t43[F(__is_const(unsigned long))];
    809   int t44[F(__is_const(unsigned short))];
    810   int t45[F(__is_const(void))];
    811   int t46[F(__is_const(ClassType))];
    812   int t47[F(__is_const(Derives))];
    813   int t48[F(__is_const(Enum))];
    814   int t49[F(__is_const(IntArNB))];
    815   int t50[F(__is_const(Union))];
    816   int t51[F(__is_const(UnionAr))];
    817 }
    818 
    819 void is_volatile()
    820 {
    821   int t02[T(__is_volatile(volatile char))];
    822   int t03[T(__is_volatile(volatile int))];
    823   int t04[T(__is_volatile(volatile long))];
    824   int t05[T(__is_volatile(volatile short))];
    825   int t06[T(__is_volatile(volatile signed char))];
    826   int t07[T(__is_volatile(volatile wchar_t))];
    827   int t08[T(__is_volatile(volatile bool))];
    828   int t09[T(__is_volatile(volatile float))];
    829   int t10[T(__is_volatile(volatile double))];
    830   int t11[T(__is_volatile(volatile long double))];
    831   int t12[T(__is_volatile(volatile unsigned char))];
    832   int t13[T(__is_volatile(volatile unsigned int))];
    833   int t14[T(__is_volatile(volatile unsigned long long))];
    834   int t15[T(__is_volatile(volatile unsigned long))];
    835   int t16[T(__is_volatile(volatile unsigned short))];
    836   int t17[T(__is_volatile(volatile void))];
    837   int t18[T(__is_volatile(volatile ClassType))];
    838   int t19[T(__is_volatile(volatile Derives))];
    839   int t20[T(__is_volatile(volatile Enum))];
    840   int t21[T(__is_volatile(volatile IntArNB))];
    841   int t22[T(__is_volatile(volatile Union))];
    842   int t23[T(__is_volatile(volatile UnionAr))];
    843 
    844   int t30[F(__is_volatile(char))];
    845   int t31[F(__is_volatile(int))];
    846   int t32[F(__is_volatile(long))];
    847   int t33[F(__is_volatile(short))];
    848   int t34[F(__is_volatile(signed char))];
    849   int t35[F(__is_volatile(wchar_t))];
    850   int t36[F(__is_volatile(bool))];
    851   int t37[F(__is_volatile(float))];
    852   int t38[F(__is_volatile(double))];
    853   int t39[F(__is_volatile(long double))];
    854   int t40[F(__is_volatile(unsigned char))];
    855   int t41[F(__is_volatile(unsigned int))];
    856   int t42[F(__is_volatile(unsigned long long))];
    857   int t43[F(__is_volatile(unsigned long))];
    858   int t44[F(__is_volatile(unsigned short))];
    859   int t45[F(__is_volatile(void))];
    860   int t46[F(__is_volatile(ClassType))];
    861   int t47[F(__is_volatile(Derives))];
    862   int t48[F(__is_volatile(Enum))];
    863   int t49[F(__is_volatile(IntArNB))];
    864   int t50[F(__is_volatile(Union))];
    865   int t51[F(__is_volatile(UnionAr))];
    866 }
    867 
    868 struct TrivialStruct {
    869   int member;
    870 };
    871 
    872 struct NonTrivialStruct {
    873   int member;
    874   NonTrivialStruct() {
    875     member = 0;
    876   }
    877 };
    878 
    879 struct SuperNonTrivialStruct {
    880   SuperNonTrivialStruct() { }
    881   ~SuperNonTrivialStruct() { }
    882 };
    883 
    884 struct NonTCStruct {
    885   NonTCStruct(const NonTCStruct&) {}
    886 };
    887 
    888 void is_trivial2()
    889 {
    890   int t01[T(__is_trivial(char))];
    891   int t02[T(__is_trivial(int))];
    892   int t03[T(__is_trivial(long))];
    893   int t04[T(__is_trivial(short))];
    894   int t05[T(__is_trivial(signed char))];
    895   int t06[T(__is_trivial(wchar_t))];
    896   int t07[T(__is_trivial(bool))];
    897   int t08[T(__is_trivial(float))];
    898   int t09[T(__is_trivial(double))];
    899   int t10[T(__is_trivial(long double))];
    900   int t11[T(__is_trivial(unsigned char))];
    901   int t12[T(__is_trivial(unsigned int))];
    902   int t13[T(__is_trivial(unsigned long long))];
    903   int t14[T(__is_trivial(unsigned long))];
    904   int t15[T(__is_trivial(unsigned short))];
    905   int t16[T(__is_trivial(ClassType))];
    906   int t17[T(__is_trivial(Derives))];
    907   int t18[T(__is_trivial(Enum))];
    908   int t19[T(__is_trivial(IntAr))];
    909   int t20[T(__is_trivial(Union))];
    910   int t21[T(__is_trivial(UnionAr))];
    911   int t22[T(__is_trivial(TrivialStruct))];
    912 
    913   int t30[F(__is_trivial(void))];
    914   int t31[F(__is_trivial(NonTrivialStruct))];
    915   int t32[F(__is_trivial(SuperNonTrivialStruct))];
    916   int t33[F(__is_trivial(NonTCStruct))];
    917 }
    918 
    919 void is_trivially_copyable2()
    920 {
    921   int t01[T(__is_trivially_copyable(char))];
    922   int t02[T(__is_trivially_copyable(int))];
    923   int t03[T(__is_trivially_copyable(long))];
    924   int t04[T(__is_trivially_copyable(short))];
    925   int t05[T(__is_trivially_copyable(signed char))];
    926   int t06[T(__is_trivially_copyable(wchar_t))];
    927   int t07[T(__is_trivially_copyable(bool))];
    928   int t08[T(__is_trivially_copyable(float))];
    929   int t09[T(__is_trivially_copyable(double))];
    930   int t10[T(__is_trivially_copyable(long double))];
    931   int t11[T(__is_trivially_copyable(unsigned char))];
    932   int t12[T(__is_trivially_copyable(unsigned int))];
    933   int t13[T(__is_trivially_copyable(unsigned long long))];
    934   int t14[T(__is_trivially_copyable(unsigned long))];
    935   int t15[T(__is_trivially_copyable(unsigned short))];
    936   int t16[T(__is_trivially_copyable(ClassType))];
    937   int t17[T(__is_trivially_copyable(Derives))];
    938   int t18[T(__is_trivially_copyable(Enum))];
    939   int t19[T(__is_trivially_copyable(IntAr))];
    940   int t20[T(__is_trivially_copyable(Union))];
    941   int t21[T(__is_trivially_copyable(UnionAr))];
    942   int t22[T(__is_trivially_copyable(TrivialStruct))];
    943   int t23[T(__is_trivially_copyable(NonTrivialStruct))];
    944 
    945   int t30[F(__is_trivially_copyable(void))];
    946   int t32[F(__is_trivially_copyable(SuperNonTrivialStruct))];
    947   int t31[F(__is_trivially_copyable(NonTCStruct))];
    948 }
    949 
    950 struct CStruct {
    951   int one;
    952   int two;
    953 };
    954 
    955 struct CEmptyStruct {};
    956 
    957 struct CppEmptyStruct : CStruct {};
    958 struct CppStructStandard : CEmptyStruct {
    959   int three;
    960   int four;
    961 };
    962 struct CppStructNonStandardByBase : CStruct {
    963   int three;
    964   int four;
    965 };
    966 struct CppStructNonStandardByVirt : CStruct {
    967   virtual void method() {}
    968 };
    969 struct CppStructNonStandardByMemb : CStruct {
    970   CppStructNonStandardByVirt member;
    971 };
    972 struct CppStructNonStandardByProt : CStruct {
    973   int five;
    974 protected:
    975   int six;
    976 };
    977 struct CppStructNonStandardByVirtBase : virtual CStruct {
    978 };
    979 struct CppStructNonStandardBySameBase : CEmptyStruct {
    980   CEmptyStruct member;
    981 };
    982 struct CppStructNonStandardBy2ndVirtBase : CEmptyStruct {
    983   CEmptyStruct member;
    984 };
    985 
    986 void is_standard_layout()
    987 {
    988   typedef const int ConstInt;
    989   typedef ConstInt ConstIntAr[4];
    990   typedef CppStructStandard CppStructStandardAr[4];
    991 
    992   int t01[T(__is_standard_layout(int))];
    993   int t02[T(__is_standard_layout(ConstInt))];
    994   int t03[T(__is_standard_layout(ConstIntAr))];
    995   int t04[T(__is_standard_layout(CStruct))];
    996   int t05[T(__is_standard_layout(CppStructStandard))];
    997   int t06[T(__is_standard_layout(CppStructStandardAr))];
    998   int t07[T(__is_standard_layout(Vector))];
    999   int t08[T(__is_standard_layout(VectorExt))];
   1000 
   1001   typedef CppStructNonStandardByBase CppStructNonStandardByBaseAr[4];
   1002 
   1003   int t10[F(__is_standard_layout(CppStructNonStandardByVirt))];
   1004   int t11[F(__is_standard_layout(CppStructNonStandardByMemb))];
   1005   int t12[F(__is_standard_layout(CppStructNonStandardByProt))];
   1006   int t13[F(__is_standard_layout(CppStructNonStandardByVirtBase))];
   1007   int t14[F(__is_standard_layout(CppStructNonStandardByBase))];
   1008   int t15[F(__is_standard_layout(CppStructNonStandardByBaseAr))];
   1009   int t16[F(__is_standard_layout(CppStructNonStandardBySameBase))];
   1010   int t17[F(__is_standard_layout(CppStructNonStandardBy2ndVirtBase))];
   1011 }
   1012 
   1013 void is_signed()
   1014 {
   1015   //int t01[T(__is_signed(char))];
   1016   int t02[T(__is_signed(int))];
   1017   int t03[T(__is_signed(long))];
   1018   int t04[T(__is_signed(short))];
   1019   int t05[T(__is_signed(signed char))];
   1020   int t06[T(__is_signed(wchar_t))];
   1021 
   1022   int t10[F(__is_signed(bool))];
   1023   int t11[F(__is_signed(cvoid))];
   1024   int t12[F(__is_signed(float))];
   1025   int t13[F(__is_signed(double))];
   1026   int t14[F(__is_signed(long double))];
   1027   int t15[F(__is_signed(unsigned char))];
   1028   int t16[F(__is_signed(unsigned int))];
   1029   int t17[F(__is_signed(unsigned long long))];
   1030   int t18[F(__is_signed(unsigned long))];
   1031   int t19[F(__is_signed(unsigned short))];
   1032   int t20[F(__is_signed(void))];
   1033   int t21[F(__is_signed(ClassType))];
   1034   int t22[F(__is_signed(Derives))];
   1035   int t23[F(__is_signed(Enum))];
   1036   int t24[F(__is_signed(IntArNB))];
   1037   int t25[F(__is_signed(Union))];
   1038   int t26[F(__is_signed(UnionAr))];
   1039 }
   1040 
   1041 void is_unsigned()
   1042 {
   1043   int t01[T(__is_unsigned(bool))];
   1044   int t02[T(__is_unsigned(unsigned char))];
   1045   int t03[T(__is_unsigned(unsigned short))];
   1046   int t04[T(__is_unsigned(unsigned int))];
   1047   int t05[T(__is_unsigned(unsigned long))];
   1048   int t06[T(__is_unsigned(unsigned long long))];
   1049   int t07[T(__is_unsigned(Enum))];
   1050 
   1051   int t10[F(__is_unsigned(void))];
   1052   int t11[F(__is_unsigned(cvoid))];
   1053   int t12[F(__is_unsigned(float))];
   1054   int t13[F(__is_unsigned(double))];
   1055   int t14[F(__is_unsigned(long double))];
   1056   int t16[F(__is_unsigned(char))];
   1057   int t17[F(__is_unsigned(signed char))];
   1058   int t18[F(__is_unsigned(wchar_t))];
   1059   int t19[F(__is_unsigned(short))];
   1060   int t20[F(__is_unsigned(int))];
   1061   int t21[F(__is_unsigned(long))];
   1062   int t22[F(__is_unsigned(Union))];
   1063   int t23[F(__is_unsigned(UnionAr))];
   1064   int t24[F(__is_unsigned(Derives))];
   1065   int t25[F(__is_unsigned(ClassType))];
   1066   int t26[F(__is_unsigned(IntArNB))];
   1067 }
   1068 
   1069 typedef Int& IntRef;
   1070 typedef const IntAr ConstIntAr;
   1071 typedef ConstIntAr ConstIntArAr[4];
   1072 
   1073 struct HasCopy {
   1074   HasCopy(HasCopy& cp);
   1075 };
   1076 
   1077 struct HasMove {
   1078   HasMove(HasMove&& cp);
   1079 };
   1080 
   1081 struct HasTemplateCons {
   1082   HasVirt Annoying;
   1083 
   1084   template <typename T>
   1085   HasTemplateCons(const T&);
   1086 };
   1087 
   1088 void has_trivial_default_constructor() {
   1089   { int arr[T(__has_trivial_constructor(Int))]; }
   1090   { int arr[T(__has_trivial_constructor(IntAr))]; }
   1091   { int arr[T(__has_trivial_constructor(Union))]; }
   1092   { int arr[T(__has_trivial_constructor(UnionAr))]; }
   1093   { int arr[T(__has_trivial_constructor(POD))]; }
   1094   { int arr[T(__has_trivial_constructor(Derives))]; }
   1095   { int arr[T(__has_trivial_constructor(DerivesAr))]; }
   1096   { int arr[T(__has_trivial_constructor(ConstIntAr))]; }
   1097   { int arr[T(__has_trivial_constructor(ConstIntArAr))]; }
   1098   { int arr[T(__has_trivial_constructor(HasDest))]; }
   1099   { int arr[T(__has_trivial_constructor(HasPriv))]; }
   1100   { int arr[T(__has_trivial_constructor(HasCopyAssign))]; }
   1101   { int arr[T(__has_trivial_constructor(HasMoveAssign))]; }
   1102   { int arr[T(__has_trivial_constructor(const Int))]; }
   1103 
   1104   { int arr[F(__has_trivial_constructor(HasCons))]; }
   1105   { int arr[F(__has_trivial_constructor(HasRef))]; }
   1106   { int arr[F(__has_trivial_constructor(HasCopy))]; }
   1107   { int arr[F(__has_trivial_constructor(IntRef))]; }
   1108   { int arr[F(__has_trivial_constructor(VirtAr))]; }
   1109   { int arr[F(__has_trivial_constructor(void))]; }
   1110   { int arr[F(__has_trivial_constructor(cvoid))]; }
   1111   { int arr[F(__has_trivial_constructor(HasTemplateCons))]; }
   1112   { int arr[F(__has_trivial_constructor(AllPrivate))]; }
   1113 }
   1114 
   1115 void has_trivial_copy_constructor() {
   1116   { int arr[T(__has_trivial_copy(Int))]; }
   1117   { int arr[T(__has_trivial_copy(IntAr))]; }
   1118   { int arr[T(__has_trivial_copy(Union))]; }
   1119   { int arr[T(__has_trivial_copy(UnionAr))]; }
   1120   { int arr[T(__has_trivial_copy(POD))]; }
   1121   { int arr[T(__has_trivial_copy(Derives))]; }
   1122   { int arr[T(__has_trivial_copy(ConstIntAr))]; }
   1123   { int arr[T(__has_trivial_copy(ConstIntArAr))]; }
   1124   { int arr[T(__has_trivial_copy(HasDest))]; }
   1125   { int arr[T(__has_trivial_copy(HasPriv))]; }
   1126   { int arr[T(__has_trivial_copy(HasCons))]; }
   1127   { int arr[T(__has_trivial_copy(HasRef))]; }
   1128   { int arr[T(__has_trivial_copy(HasMove))]; }
   1129   { int arr[T(__has_trivial_copy(IntRef))]; }
   1130   { int arr[T(__has_trivial_copy(HasCopyAssign))]; }
   1131   { int arr[T(__has_trivial_copy(HasMoveAssign))]; }
   1132   { int arr[T(__has_trivial_copy(const Int))]; }
   1133 
   1134   { int arr[F(__has_trivial_copy(HasCopy))]; }
   1135   { int arr[F(__has_trivial_copy(HasTemplateCons))]; }
   1136   { int arr[F(__has_trivial_copy(DerivesAr))]; }
   1137   { int arr[F(__has_trivial_copy(VirtAr))]; }
   1138   { int arr[F(__has_trivial_copy(void))]; }
   1139   { int arr[F(__has_trivial_copy(cvoid))]; }
   1140   { int arr[F(__has_trivial_copy(AllPrivate))]; }
   1141 }
   1142 
   1143 void has_trivial_copy_assignment() {
   1144   { int arr[T(__has_trivial_assign(Int))]; }
   1145   { int arr[T(__has_trivial_assign(IntAr))]; }
   1146   { int arr[T(__has_trivial_assign(Union))]; }
   1147   { int arr[T(__has_trivial_assign(UnionAr))]; }
   1148   { int arr[T(__has_trivial_assign(POD))]; }
   1149   { int arr[T(__has_trivial_assign(Derives))]; }
   1150   { int arr[T(__has_trivial_assign(HasDest))]; }
   1151   { int arr[T(__has_trivial_assign(HasPriv))]; }
   1152   { int arr[T(__has_trivial_assign(HasCons))]; }
   1153   { int arr[T(__has_trivial_assign(HasRef))]; }
   1154   { int arr[T(__has_trivial_assign(HasCopy))]; }
   1155   { int arr[T(__has_trivial_assign(HasMove))]; }
   1156   { int arr[T(__has_trivial_assign(HasMoveAssign))]; }
   1157 
   1158   { int arr[F(__has_trivial_assign(IntRef))]; }
   1159   { int arr[F(__has_trivial_assign(HasCopyAssign))]; }
   1160   { int arr[F(__has_trivial_assign(const Int))]; }
   1161   { int arr[F(__has_trivial_assign(ConstIntAr))]; }
   1162   { int arr[F(__has_trivial_assign(ConstIntArAr))]; }
   1163   { int arr[F(__has_trivial_assign(DerivesAr))]; }
   1164   { int arr[F(__has_trivial_assign(VirtAr))]; }
   1165   { int arr[F(__has_trivial_assign(void))]; }
   1166   { int arr[F(__has_trivial_assign(cvoid))]; }
   1167   { int arr[F(__has_trivial_assign(AllPrivate))]; }
   1168 }
   1169 
   1170 void has_trivial_destructor() {
   1171   { int arr[T(__has_trivial_destructor(Int))]; }
   1172   { int arr[T(__has_trivial_destructor(IntAr))]; }
   1173   { int arr[T(__has_trivial_destructor(Union))]; }
   1174   { int arr[T(__has_trivial_destructor(UnionAr))]; }
   1175   { int arr[T(__has_trivial_destructor(POD))]; }
   1176   { int arr[T(__has_trivial_destructor(Derives))]; }
   1177   { int arr[T(__has_trivial_destructor(ConstIntAr))]; }
   1178   { int arr[T(__has_trivial_destructor(ConstIntArAr))]; }
   1179   { int arr[T(__has_trivial_destructor(HasPriv))]; }
   1180   { int arr[T(__has_trivial_destructor(HasCons))]; }
   1181   { int arr[T(__has_trivial_destructor(HasRef))]; }
   1182   { int arr[T(__has_trivial_destructor(HasCopy))]; }
   1183   { int arr[T(__has_trivial_destructor(HasMove))]; }
   1184   { int arr[T(__has_trivial_destructor(IntRef))]; }
   1185   { int arr[T(__has_trivial_destructor(HasCopyAssign))]; }
   1186   { int arr[T(__has_trivial_destructor(HasMoveAssign))]; }
   1187   { int arr[T(__has_trivial_destructor(const Int))]; }
   1188   { int arr[T(__has_trivial_destructor(DerivesAr))]; }
   1189   { int arr[T(__has_trivial_destructor(VirtAr))]; }
   1190 
   1191   { int arr[F(__has_trivial_destructor(HasDest))]; }
   1192   { int arr[F(__has_trivial_destructor(void))]; }
   1193   { int arr[F(__has_trivial_destructor(cvoid))]; }
   1194   { int arr[F(__has_trivial_destructor(AllPrivate))]; }
   1195 }
   1196 
   1197 struct A { ~A() {} };
   1198 template<typename> struct B : A { };
   1199 
   1200 void f() {
   1201   { int arr[F(__has_trivial_destructor(A))]; }
   1202   { int arr[F(__has_trivial_destructor(B<int>))]; }
   1203 }
   1204 
   1205 class PR11110 {
   1206   template <int> int operator=( int );
   1207   int operator=(PR11110);
   1208 };
   1209 
   1210 class UsingAssign;
   1211 
   1212 class UsingAssignBase {
   1213 protected:
   1214   UsingAssign &operator=(const UsingAssign&) throw();
   1215 };
   1216 
   1217 class UsingAssign : public UsingAssignBase {
   1218 public:
   1219   using UsingAssignBase::operator=;
   1220 };
   1221 
   1222 void has_nothrow_assign() {
   1223   { int arr[T(__has_nothrow_assign(Int))]; }
   1224   { int arr[T(__has_nothrow_assign(IntAr))]; }
   1225   { int arr[T(__has_nothrow_assign(Union))]; }
   1226   { int arr[T(__has_nothrow_assign(UnionAr))]; }
   1227   { int arr[T(__has_nothrow_assign(POD))]; }
   1228   { int arr[T(__has_nothrow_assign(Derives))]; }
   1229   { int arr[T(__has_nothrow_assign(HasDest))]; }
   1230   { int arr[T(__has_nothrow_assign(HasPriv))]; }
   1231   { int arr[T(__has_nothrow_assign(HasCons))]; }
   1232   { int arr[T(__has_nothrow_assign(HasRef))]; }
   1233   { int arr[T(__has_nothrow_assign(HasCopy))]; }
   1234   { int arr[T(__has_nothrow_assign(HasMove))]; }
   1235   { int arr[T(__has_nothrow_assign(HasMoveAssign))]; }
   1236   { int arr[T(__has_nothrow_assign(HasNoThrowCopyAssign))]; }
   1237   { int arr[T(__has_nothrow_assign(HasMultipleNoThrowCopyAssign))]; }
   1238   { int arr[T(__has_nothrow_assign(HasVirtDest))]; }
   1239   { int arr[T(__has_nothrow_assign(AllPrivate))]; }
   1240   { int arr[T(__has_nothrow_assign(UsingAssign))]; }
   1241 
   1242   { int arr[F(__has_nothrow_assign(IntRef))]; }
   1243   { int arr[F(__has_nothrow_assign(HasCopyAssign))]; }
   1244   { int arr[F(__has_nothrow_assign(HasMultipleCopyAssign))]; }
   1245   { int arr[F(__has_nothrow_assign(const Int))]; }
   1246   { int arr[F(__has_nothrow_assign(ConstIntAr))]; }
   1247   { int arr[F(__has_nothrow_assign(ConstIntArAr))]; }
   1248   { int arr[F(__has_nothrow_assign(DerivesAr))]; }
   1249   { int arr[F(__has_nothrow_assign(VirtAr))]; }
   1250   { int arr[F(__has_nothrow_assign(void))]; }
   1251   { int arr[F(__has_nothrow_assign(cvoid))]; }
   1252   { int arr[F(__has_nothrow_assign(PR11110))]; }
   1253 }
   1254 
   1255 void has_nothrow_copy() {
   1256   { int arr[T(__has_nothrow_copy(Int))]; }
   1257   { int arr[T(__has_nothrow_copy(IntAr))]; }
   1258   { int arr[T(__has_nothrow_copy(Union))]; }
   1259   { int arr[T(__has_nothrow_copy(UnionAr))]; }
   1260   { int arr[T(__has_nothrow_copy(POD))]; }
   1261   { int arr[T(__has_nothrow_copy(const Int))]; }
   1262   { int arr[T(__has_nothrow_copy(ConstIntAr))]; }
   1263   { int arr[T(__has_nothrow_copy(ConstIntArAr))]; }
   1264   { int arr[T(__has_nothrow_copy(Derives))]; }
   1265   { int arr[T(__has_nothrow_copy(IntRef))]; }
   1266   { int arr[T(__has_nothrow_copy(HasDest))]; }
   1267   { int arr[T(__has_nothrow_copy(HasPriv))]; }
   1268   { int arr[T(__has_nothrow_copy(HasCons))]; }
   1269   { int arr[T(__has_nothrow_copy(HasRef))]; }
   1270   { int arr[T(__has_nothrow_copy(HasMove))]; }
   1271   { int arr[T(__has_nothrow_copy(HasCopyAssign))]; }
   1272   { int arr[T(__has_nothrow_copy(HasMoveAssign))]; }
   1273   { int arr[T(__has_nothrow_copy(HasNoThrowCopy))]; }
   1274   { int arr[T(__has_nothrow_copy(HasMultipleNoThrowCopy))]; }
   1275   { int arr[T(__has_nothrow_copy(HasVirtDest))]; }
   1276   { int arr[T(__has_nothrow_copy(HasTemplateCons))]; }
   1277   { int arr[T(__has_nothrow_copy(AllPrivate))]; }
   1278 
   1279   { int arr[F(__has_nothrow_copy(HasCopy))]; }
   1280   { int arr[F(__has_nothrow_copy(HasMultipleCopy))]; }
   1281   { int arr[F(__has_nothrow_copy(DerivesAr))]; }
   1282   { int arr[F(__has_nothrow_copy(VirtAr))]; }
   1283   { int arr[F(__has_nothrow_copy(void))]; }
   1284   { int arr[F(__has_nothrow_copy(cvoid))]; }
   1285 }
   1286 
   1287 template<bool b> struct assert_expr;
   1288 template<> struct assert_expr<true> {};
   1289 
   1290 void has_nothrow_constructor() {
   1291   { int arr[T(__has_nothrow_constructor(Int))]; }
   1292   { int arr[T(__has_nothrow_constructor(IntAr))]; }
   1293   { int arr[T(__has_nothrow_constructor(Union))]; }
   1294   { int arr[T(__has_nothrow_constructor(UnionAr))]; }
   1295   { int arr[T(__has_nothrow_constructor(POD))]; }
   1296   { int arr[T(__has_nothrow_constructor(Derives))]; }
   1297   { int arr[T(__has_nothrow_constructor(DerivesAr))]; }
   1298   { int arr[T(__has_nothrow_constructor(ConstIntAr))]; }
   1299   { int arr[T(__has_nothrow_constructor(ConstIntArAr))]; }
   1300   { int arr[T(__has_nothrow_constructor(HasDest))]; }
   1301   { int arr[T(__has_nothrow_constructor(HasPriv))]; }
   1302   { int arr[T(__has_nothrow_constructor(HasCopyAssign))]; }
   1303   { int arr[T(__has_nothrow_constructor(const Int))]; }
   1304   { int arr[T(__has_nothrow_constructor(HasNoThrowConstructor))]; }
   1305   { int arr[T(__has_nothrow_constructor(HasVirtDest))]; }
   1306   // { int arr[T(__has_nothrow_constructor(VirtAr))]; } // not implemented
   1307   { int arr[T(__has_nothrow_constructor(AllPrivate))]; }
   1308 
   1309   { int arr[F(__has_nothrow_constructor(HasCons))]; }
   1310   { int arr[F(__has_nothrow_constructor(HasRef))]; }
   1311   { int arr[F(__has_nothrow_constructor(HasCopy))]; }
   1312   { int arr[F(__has_nothrow_constructor(HasMove))]; }
   1313   { int arr[F(__has_nothrow_constructor(HasNoThrowConstructorWithArgs))]; }
   1314   { int arr[F(__has_nothrow_constructor(IntRef))]; }
   1315   { int arr[F(__has_nothrow_constructor(void))]; }
   1316   { int arr[F(__has_nothrow_constructor(cvoid))]; }
   1317   { int arr[F(__has_nothrow_constructor(HasTemplateCons))]; }
   1318 
   1319   // While parsing an in-class initializer, the constructor is not known to be
   1320   // non-throwing yet.
   1321   struct HasInClassInit { int n = (assert_expr<!__has_nothrow_constructor(HasInClassInit)>(), 0); };
   1322   { int arr[T(__has_nothrow_constructor(HasInClassInit))]; }
   1323 }
   1324 
   1325 void has_virtual_destructor() {
   1326   { int arr[F(__has_virtual_destructor(Int))]; }
   1327   { int arr[F(__has_virtual_destructor(IntAr))]; }
   1328   { int arr[F(__has_virtual_destructor(Union))]; }
   1329   { int arr[F(__has_virtual_destructor(UnionAr))]; }
   1330   { int arr[F(__has_virtual_destructor(POD))]; }
   1331   { int arr[F(__has_virtual_destructor(Derives))]; }
   1332   { int arr[F(__has_virtual_destructor(DerivesAr))]; }
   1333   { int arr[F(__has_virtual_destructor(const Int))]; }
   1334   { int arr[F(__has_virtual_destructor(ConstIntAr))]; }
   1335   { int arr[F(__has_virtual_destructor(ConstIntArAr))]; }
   1336   { int arr[F(__has_virtual_destructor(HasDest))]; }
   1337   { int arr[F(__has_virtual_destructor(HasPriv))]; }
   1338   { int arr[F(__has_virtual_destructor(HasCons))]; }
   1339   { int arr[F(__has_virtual_destructor(HasRef))]; }
   1340   { int arr[F(__has_virtual_destructor(HasCopy))]; }
   1341   { int arr[F(__has_virtual_destructor(HasMove))]; }
   1342   { int arr[F(__has_virtual_destructor(HasCopyAssign))]; }
   1343   { int arr[F(__has_virtual_destructor(HasMoveAssign))]; }
   1344   { int arr[F(__has_virtual_destructor(IntRef))]; }
   1345   { int arr[F(__has_virtual_destructor(VirtAr))]; }
   1346 
   1347   { int arr[T(__has_virtual_destructor(HasVirtDest))]; }
   1348   { int arr[T(__has_virtual_destructor(DerivedVirtDest))]; }
   1349   { int arr[F(__has_virtual_destructor(VirtDestAr))]; }
   1350   { int arr[F(__has_virtual_destructor(void))]; }
   1351   { int arr[F(__has_virtual_destructor(cvoid))]; }
   1352   { int arr[F(__has_virtual_destructor(AllPrivate))]; }
   1353 }
   1354 
   1355 
   1356 class Base {};
   1357 class Derived : Base {};
   1358 class Derived2a : Derived {};
   1359 class Derived2b : Derived {};
   1360 class Derived3 : virtual Derived2a, virtual Derived2b {};
   1361 template<typename T> struct BaseA { T a;  };
   1362 template<typename T> struct DerivedB : BaseA<T> { };
   1363 template<typename T> struct CrazyDerived : T { };
   1364 
   1365 
   1366 class class_forward; // expected-note {{forward declaration of 'class_forward'}}
   1367 
   1368 template <typename Base, typename Derived>
   1369 void isBaseOfT() {
   1370   int t[T(__is_base_of(Base, Derived))];
   1371 };
   1372 template <typename Base, typename Derived>
   1373 void isBaseOfF() {
   1374   int t[F(__is_base_of(Base, Derived))];
   1375 };
   1376 
   1377 template <class T> class DerivedTemp : Base {};
   1378 template <class T> class NonderivedTemp {};
   1379 template <class T> class UndefinedTemp; // expected-note {{declared here}}
   1380 
   1381 void is_base_of() {
   1382   { int arr[T(__is_base_of(Base, Derived))]; }
   1383   { int arr[T(__is_base_of(const Base, Derived))]; }
   1384   { int arr[F(__is_base_of(Derived, Base))]; }
   1385   { int arr[F(__is_base_of(Derived, int))]; }
   1386   { int arr[T(__is_base_of(Base, Base))]; }
   1387   { int arr[T(__is_base_of(Base, Derived3))]; }
   1388   { int arr[T(__is_base_of(Derived, Derived3))]; }
   1389   { int arr[T(__is_base_of(Derived2b, Derived3))]; }
   1390   { int arr[T(__is_base_of(Derived2a, Derived3))]; }
   1391   { int arr[T(__is_base_of(BaseA<int>, DerivedB<int>))]; }
   1392   { int arr[F(__is_base_of(DerivedB<int>, BaseA<int>))]; }
   1393   { int arr[T(__is_base_of(Base, CrazyDerived<Base>))]; }
   1394   { int arr[F(__is_base_of(Union, Union))]; }
   1395   { int arr[T(__is_base_of(Empty, Empty))]; }
   1396   { int arr[T(__is_base_of(class_forward, class_forward))]; }
   1397   { int arr[F(__is_base_of(Empty, class_forward))]; } // expected-error {{incomplete type 'class_forward' used in type trait expression}}
   1398   { int arr[F(__is_base_of(Base&, Derived&))]; }
   1399   int t18[F(__is_base_of(Base[10], Derived[10]))];
   1400   { int arr[F(__is_base_of(int, int))]; }
   1401   { int arr[F(__is_base_of(long, int))]; }
   1402   { int arr[T(__is_base_of(Base, DerivedTemp<int>))]; }
   1403   { int arr[F(__is_base_of(Base, NonderivedTemp<int>))]; }
   1404   { int arr[F(__is_base_of(Base, UndefinedTemp<int>))]; } // expected-error {{implicit instantiation of undefined template 'UndefinedTemp<int>'}}
   1405 
   1406   isBaseOfT<Base, Derived>();
   1407   isBaseOfF<Derived, Base>();
   1408 
   1409   isBaseOfT<Base, CrazyDerived<Base> >();
   1410   isBaseOfF<CrazyDerived<Base>, Base>();
   1411 
   1412   isBaseOfT<BaseA<int>, DerivedB<int> >();
   1413   isBaseOfF<DerivedB<int>, BaseA<int> >();
   1414 }
   1415 
   1416 #if 0
   1417 template<class T, class U>
   1418 class TemplateClass {};
   1419 
   1420 template<class T>
   1421 using TemplateAlias = TemplateClass<T, int>;
   1422 #endif
   1423 
   1424 typedef class Base BaseTypedef;
   1425 
   1426 void is_same()
   1427 {
   1428   int t01[T(__is_same(Base, Base))];
   1429   int t02[T(__is_same(Base, BaseTypedef))];
   1430 #if 0
   1431   int t03[T(__is_same(TemplateClass<int, int>, TemplateAlias<int>))];
   1432 #endif
   1433 
   1434   int t10[F(__is_same(Base, const Base))];
   1435   int t11[F(__is_same(Base, Base&))];
   1436   int t12[F(__is_same(Base, Derived))];
   1437 }
   1438 
   1439 struct IntWrapper
   1440 {
   1441   int value;
   1442   IntWrapper(int _value) : value(_value) {}
   1443   operator int() const {
   1444     return value;
   1445   }
   1446 };
   1447 
   1448 struct FloatWrapper
   1449 {
   1450   float value;
   1451   FloatWrapper(float _value) : value(_value) {}
   1452   FloatWrapper(const IntWrapper& obj)
   1453     : value(static_cast<float>(obj.value)) {}
   1454   operator float() const {
   1455     return value;
   1456   }
   1457   operator IntWrapper() const {
   1458     return IntWrapper(static_cast<int>(value));
   1459   }
   1460 };
   1461 
   1462 void is_convertible()
   1463 {
   1464   int t01[T(__is_convertible(IntWrapper, IntWrapper))];
   1465   int t02[T(__is_convertible(IntWrapper, const IntWrapper))];
   1466   int t03[T(__is_convertible(IntWrapper, int))];
   1467   int t04[T(__is_convertible(int, IntWrapper))];
   1468   int t05[T(__is_convertible(IntWrapper, FloatWrapper))];
   1469   int t06[T(__is_convertible(FloatWrapper, IntWrapper))];
   1470   int t07[T(__is_convertible(FloatWrapper, float))];
   1471   int t08[T(__is_convertible(float, FloatWrapper))];
   1472 }
   1473 
   1474 struct FromInt { FromInt(int); };
   1475 struct ToInt { operator int(); };
   1476 typedef void Function();
   1477 
   1478 void is_convertible_to();
   1479 class PrivateCopy {
   1480   PrivateCopy(const PrivateCopy&);
   1481   friend void is_convertible_to();
   1482 };
   1483 
   1484 template<typename T>
   1485 struct X0 {
   1486   template<typename U> X0(const X0<U>&);
   1487 };
   1488 
   1489 void is_convertible_to() {
   1490   { int arr[T(__is_convertible_to(Int, Int))]; }
   1491   { int arr[F(__is_convertible_to(Int, IntAr))]; }
   1492   { int arr[F(__is_convertible_to(IntAr, IntAr))]; }
   1493   { int arr[T(__is_convertible_to(void, void))]; }
   1494   { int arr[T(__is_convertible_to(cvoid, void))]; }
   1495   { int arr[T(__is_convertible_to(void, cvoid))]; }
   1496   { int arr[T(__is_convertible_to(cvoid, cvoid))]; }
   1497   { int arr[T(__is_convertible_to(int, FromInt))]; }
   1498   { int arr[T(__is_convertible_to(long, FromInt))]; }
   1499   { int arr[T(__is_convertible_to(double, FromInt))]; }
   1500   { int arr[T(__is_convertible_to(const int, FromInt))]; }
   1501   { int arr[T(__is_convertible_to(const int&, FromInt))]; }
   1502   { int arr[T(__is_convertible_to(ToInt, int))]; }
   1503   { int arr[T(__is_convertible_to(ToInt, const int&))]; }
   1504   { int arr[T(__is_convertible_to(ToInt, long))]; }
   1505   { int arr[F(__is_convertible_to(ToInt, int&))]; }
   1506   { int arr[F(__is_convertible_to(ToInt, FromInt))]; }
   1507   { int arr[T(__is_convertible_to(IntAr&, IntAr&))]; }
   1508   { int arr[T(__is_convertible_to(IntAr&, const IntAr&))]; }
   1509   { int arr[F(__is_convertible_to(const IntAr&, IntAr&))]; }
   1510   { int arr[F(__is_convertible_to(Function, Function))]; }
   1511   { int arr[F(__is_convertible_to(PrivateCopy, PrivateCopy))]; }
   1512   { int arr[T(__is_convertible_to(X0<int>, X0<float>))]; }
   1513 }
   1514 
   1515 void is_trivial()
   1516 {
   1517   { int arr[T(__is_trivial(int))]; }
   1518   { int arr[T(__is_trivial(Enum))]; }
   1519   { int arr[T(__is_trivial(POD))]; }
   1520   { int arr[T(__is_trivial(Int))]; }
   1521   { int arr[T(__is_trivial(IntAr))]; }
   1522   { int arr[T(__is_trivial(IntArNB))]; }
   1523   { int arr[T(__is_trivial(Statics))]; }
   1524   { int arr[T(__is_trivial(Empty))]; }
   1525   { int arr[T(__is_trivial(EmptyUnion))]; }
   1526   { int arr[T(__is_trivial(Union))]; }
   1527   { int arr[T(__is_trivial(Derives))]; }
   1528   { int arr[T(__is_trivial(DerivesAr))]; }
   1529   { int arr[T(__is_trivial(DerivesArNB))]; }
   1530   { int arr[T(__is_trivial(DerivesEmpty))]; }
   1531   { int arr[T(__is_trivial(HasFunc))]; }
   1532   { int arr[T(__is_trivial(HasOp))]; }
   1533   { int arr[T(__is_trivial(HasConv))]; }
   1534   { int arr[T(__is_trivial(HasAssign))]; }
   1535   { int arr[T(__is_trivial(HasAnonymousUnion))]; }
   1536   { int arr[T(__is_trivial(HasPriv))]; }
   1537   { int arr[T(__is_trivial(HasProt))]; }
   1538   { int arr[T(__is_trivial(DerivesHasPriv))]; }
   1539   { int arr[T(__is_trivial(DerivesHasProt))]; }
   1540   { int arr[T(__is_trivial(Vector))]; }
   1541   { int arr[T(__is_trivial(VectorExt))]; }
   1542 
   1543   { int arr[F(__is_trivial(HasCons))]; }
   1544   { int arr[F(__is_trivial(HasCopyAssign))]; }
   1545   { int arr[F(__is_trivial(HasMoveAssign))]; }
   1546   { int arr[F(__is_trivial(HasDest))]; }
   1547   { int arr[F(__is_trivial(HasRef))]; }
   1548   { int arr[F(__is_trivial(HasNonPOD))]; }
   1549   { int arr[F(__is_trivial(HasVirt))]; }
   1550   { int arr[F(__is_trivial(DerivesHasCons))]; }
   1551   { int arr[F(__is_trivial(DerivesHasCopyAssign))]; }
   1552   { int arr[F(__is_trivial(DerivesHasMoveAssign))]; }
   1553   { int arr[F(__is_trivial(DerivesHasDest))]; }
   1554   { int arr[F(__is_trivial(DerivesHasRef))]; }
   1555   { int arr[F(__is_trivial(DerivesHasVirt))]; }
   1556   { int arr[F(__is_trivial(void))]; }
   1557   { int arr[F(__is_trivial(cvoid))]; }
   1558 }
   1559 
   1560 void is_trivially_copyable()
   1561 {
   1562   { int arr[T(__is_trivially_copyable(int))]; }
   1563   { int arr[T(__is_trivially_copyable(Enum))]; }
   1564   { int arr[T(__is_trivially_copyable(POD))]; }
   1565   { int arr[T(__is_trivially_copyable(Int))]; }
   1566   { int arr[T(__is_trivially_copyable(IntAr))]; }
   1567   { int arr[T(__is_trivially_copyable(IntArNB))]; }
   1568   { int arr[T(__is_trivially_copyable(Statics))]; }
   1569   { int arr[T(__is_trivially_copyable(Empty))]; }
   1570   { int arr[T(__is_trivially_copyable(EmptyUnion))]; }
   1571   { int arr[T(__is_trivially_copyable(Union))]; }
   1572   { int arr[T(__is_trivially_copyable(Derives))]; }
   1573   { int arr[T(__is_trivially_copyable(DerivesAr))]; }
   1574   { int arr[T(__is_trivially_copyable(DerivesArNB))]; }
   1575   { int arr[T(__is_trivially_copyable(DerivesEmpty))]; }
   1576   { int arr[T(__is_trivially_copyable(HasFunc))]; }
   1577   { int arr[T(__is_trivially_copyable(HasOp))]; }
   1578   { int arr[T(__is_trivially_copyable(HasConv))]; }
   1579   { int arr[T(__is_trivially_copyable(HasAssign))]; }
   1580   { int arr[T(__is_trivially_copyable(HasAnonymousUnion))]; }
   1581   { int arr[T(__is_trivially_copyable(HasPriv))]; }
   1582   { int arr[T(__is_trivially_copyable(HasProt))]; }
   1583   { int arr[T(__is_trivially_copyable(DerivesHasPriv))]; }
   1584   { int arr[T(__is_trivially_copyable(DerivesHasProt))]; }
   1585   { int arr[T(__is_trivially_copyable(Vector))]; }
   1586   { int arr[T(__is_trivially_copyable(VectorExt))]; }
   1587   { int arr[T(__is_trivially_copyable(HasCons))]; }
   1588   { int arr[T(__is_trivially_copyable(HasRef))]; }
   1589   { int arr[T(__is_trivially_copyable(HasNonPOD))]; }
   1590   { int arr[T(__is_trivially_copyable(DerivesHasCons))]; }
   1591   { int arr[T(__is_trivially_copyable(DerivesHasRef))]; }
   1592 
   1593   { int arr[F(__is_trivially_copyable(HasCopyAssign))]; }
   1594   { int arr[F(__is_trivially_copyable(HasMoveAssign))]; }
   1595   { int arr[F(__is_trivially_copyable(HasDest))]; }
   1596   { int arr[F(__is_trivially_copyable(HasVirt))]; }
   1597   { int arr[F(__is_trivially_copyable(DerivesHasCopyAssign))]; }
   1598   { int arr[F(__is_trivially_copyable(DerivesHasMoveAssign))]; }
   1599   { int arr[F(__is_trivially_copyable(DerivesHasDest))]; }
   1600   { int arr[F(__is_trivially_copyable(DerivesHasVirt))]; }
   1601   { int arr[F(__is_trivially_copyable(void))]; }
   1602   { int arr[F(__is_trivially_copyable(cvoid))]; }
   1603 }
   1604 
   1605 void array_rank() {
   1606   int t01[T(__array_rank(IntAr) == 1)];
   1607   int t02[T(__array_rank(ConstIntArAr) == 2)];
   1608 }
   1609 
   1610 void array_extent() {
   1611   int t01[T(__array_extent(IntAr, 0) == 10)];
   1612   int t02[T(__array_extent(ConstIntArAr, 0) == 4)];
   1613   int t03[T(__array_extent(ConstIntArAr, 1) == 10)];
   1614 }
   1615