1 // RUN: %clang_cc1 -std=c++03 -fsyntax-only %s 2 // RUN: %clang_cc1 -std=c++11 -DCXX11 -fsyntax-only %s 3 4 #define IS_KEYWORD(NAME) _Static_assert(!__is_identifier(NAME), #NAME) 5 #define NOT_KEYWORD(NAME) _Static_assert(__is_identifier(NAME), #NAME) 6 #define IS_TYPE(NAME) void is_##NAME##_type() { int f(NAME); } 7 8 #ifdef CXX11 9 #define CXX11_KEYWORD(NAME) IS_KEYWORD(NAME) 10 #define CXX11_TYPE(NAME) IS_TYPE(NAME) 11 #else 12 #define CXX11_KEYWORD(NAME) NOT_KEYWORD(NAME) 13 #define CXX11_TYPE(NAME) 14 #endif 15 16 // C++11 keywords 17 CXX11_KEYWORD(nullptr); 18 CXX11_KEYWORD(decltype); 19 CXX11_KEYWORD(alignof); 20 CXX11_KEYWORD(alignas); 21 CXX11_KEYWORD(char16_t); 22 CXX11_TYPE(char16_t); 23 CXX11_KEYWORD(char32_t); 24 CXX11_TYPE(char32_t); 25 CXX11_KEYWORD(constexpr); 26 CXX11_KEYWORD(noexcept); 27 CXX11_KEYWORD(static_assert); 28 CXX11_KEYWORD(thread_local); 29 30 // Clang extension 31 IS_KEYWORD(__char16_t); 32 IS_TYPE(__char16_t); 33 IS_KEYWORD(__char32_t); 34 IS_TYPE(__char32_t); 35