190 lines · cpp
1// RUN: %clang_cc1 %s -E -verify -fms-extensions2// expected-no-diagnostics3 4#pragma clang diagnostic ignored "-Wkeyword-macro"5 6bool f() {7 // Check that operators still work before redefining them.8#if compl 0 bitand 19 return true and false;10#endif11}12 13#ifdef and14#endif15 16// The second 'and' is a valid C++ operator name for '&&'.17#if defined and and defined(and)18#endif19 20// All c++ keywords should be #define-able in ms mode.21// (operators like "and" aren't normally, the rest always is.)22#define and23#define and_eq24#define alignas25#define alignof26#define asm27#define auto28#define bitand29#define bitor30#define bool31#define break32#define case33#define catch34#define char35#define char16_t36#define char32_t37#define class38#define compl39#define const40#define constexpr41#define const_cast42#define continue43#define decltype44#define default45#define delete46#define double47#define dynamic_cast48#define else49#define enum50#define explicit51#define export52#define extern53#define false54#define float55#define for56#define friend57#define goto58#define if59#define inline60#define int61#define long62#define mutable63#define namespace64#define new65#define noexcept66#define not67#define not_eq68#define nullptr69#define operator70#define or71#define or_eq72#define private73#define protected74#define public75#define register76#define reinterpret_cast77#define return78#define short79#define signed80#define sizeof81#define static82#define static_assert83#define static_cast84#define struct85#define switch86#define template87#define this88#define thread_local89#define throw90#define true91#define try92#define typedef93#define typeid94#define typename95#define union96#define unsigned97#define using98#define virtual99#define void100#define volatile101#define wchar_t102#define while103#define xor104#define xor_eq105 106// Check this is all properly defined away.107and108and_eq109alignas110alignof111asm112auto113bitand114bitor115bool116break117case118catch119char120char16_t121char32_t122class123compl124const125constexpr126const_cast127continue128decltype129default130delete131double132dynamic_cast133else134enum135explicit136export137extern138false139float140for141friend142goto143if144inline145int146long147mutable148namespace149new150noexcept151not152not_eq153nullptr154operator155or156or_eq157private158protected159public160register161reinterpret_cast162return163short164signed165sizeof166static167static_assert168static_cast169struct170switch171template172this173thread_local174throw175true176try177typedef178typeid179typename180union181unsigned182using183virtual184void185volatile186wchar_t187while188xor189xor_eq190