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