keywords_test.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // RUN: %clang_cc1 -std=c++03 -fsyntax-only %s
  2. // RUN: %clang_cc1 -std=c++11 -DCXX11 -fsyntax-only %s
  3. // RUN: %clang_cc1 -std=c++14 -fconcepts-ts -DCXX11 -DCONCEPTS -fsyntax-only %s
  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. #ifdef CONCEPTS
  8. #define CONCEPTS_KEYWORD(NAME) IS_KEYWORD(NAME)
  9. #else
  10. #define CONCEPTS_KEYWORD(NAME) NOT_KEYWORD(NAME)
  11. #endif
  12. #ifdef CXX11
  13. #define CXX11_KEYWORD(NAME) IS_KEYWORD(NAME)
  14. #define CXX11_TYPE(NAME) IS_TYPE(NAME)
  15. #else
  16. #define CXX11_KEYWORD(NAME) NOT_KEYWORD(NAME)
  17. #define CXX11_TYPE(NAME)
  18. #endif
  19. // C++11 keywords
  20. CXX11_KEYWORD(nullptr);
  21. CXX11_KEYWORD(decltype);
  22. CXX11_KEYWORD(alignof);
  23. CXX11_KEYWORD(alignas);
  24. CXX11_KEYWORD(char16_t);
  25. CXX11_TYPE(char16_t);
  26. CXX11_KEYWORD(char32_t);
  27. CXX11_TYPE(char32_t);
  28. CXX11_KEYWORD(constexpr);
  29. CXX11_KEYWORD(noexcept);
  30. CXX11_KEYWORD(static_assert);
  31. CXX11_KEYWORD(thread_local);
  32. // Concepts TS keywords
  33. CONCEPTS_KEYWORD(concept);
  34. CONCEPTS_KEYWORD(requires);
  35. // Clang extension
  36. IS_KEYWORD(__char16_t);
  37. IS_TYPE(__char16_t);
  38. IS_KEYWORD(__char32_t);
  39. IS_TYPE(__char32_t);