Home | History | Annotate | Download | only in SemaCXX
      1 // RUN: %clang_cc1 -fsyntax-only %s
      2 
      3 // This is a test for an egregious hack in Clang that works around
      4 // issues with GCC's evolution. libstdc++ 4.2.x uses __is_pod as an
      5 // identifier (to declare a struct template like the one below), while
      6 // GCC 4.3 and newer make __is_pod a keyword. Clang treats __is_pod as
      7 // a keyword *unless* it is introduced following the struct keyword.
      8 
      9 template<typename T>
     10 struct __is_pod {
     11 };
     12 
     13 __is_pod<int> ipi;
     14 
     15 // Ditto for __is_same.
     16 template<typename T>
     17 struct __is_same {
     18 };
     19 
     20 __is_same<int> isi;
     21 
     22 // Another, similar egregious hack for __is_signed, which is a type
     23 // trait in Embarcadero's compiler but is used as an identifier in
     24 // libstdc++.
     25 struct test_is_signed {
     26   static const bool __is_signed = true;
     27 };
     28 
     29 bool check_signed = test_is_signed::__is_signed;
     30 
     31 #if __has_feature(is_pod)
     32 #  error __is_pod won't work now anyway
     33 #endif
     34