// RUN: %clang_cc1 %s -E -verify -fms-extensions | |
// expected-no-diagnostics | |
#pragma clang diagnostic ignored "-Wkeyword-macro" | |
bool f() { | |
// Check that operators still work before redefining them. | |
#if compl 0 bitand 1 | |
return true and false; | |
#endif | |
} | |
#ifdef and | |
#endif | |
// The second 'and' is a valid C++ operator name for '&&'. | |
#if defined and and defined(and) | |
#endif | |
// All c++ keywords should be #define-able in ms mode. | |
// (operators like "and" aren't normally, the rest always is.) | |
#define and | |
#define and_eq | |
#define alignas | |
#define alignof | |
#define asm | |
#define auto | |
#define bitand | |
#define bitor | |
#define bool | |
#define break | |
#define case | |
#define catch | |
#define char | |
#define char16_t | |
#define char32_t | |
#define class | |
#define compl | |
#define const | |
#define constexpr | |
#define const_cast | |
#define continue | |
#define decltype | |
#define default | |
#define delete | |
#define double | |
#define dynamic_cast | |
#define else | |
#define enum | |
#define explicit | |
#define export | |
#define extern | |
#define false | |
#define float | |
#define for | |
#define friend | |
#define goto | |
#define if | |
#define inline | |
#define int | |
#define long | |
#define mutable | |
#define namespace | |
#define new | |
#define noexcept | |
#define not | |
#define not_eq | |
#define nullptr | |
#define operator | |
#define or | |
#define or_eq | |
#define private | |
#define protected | |
#define public | |
#define register | |
#define reinterpret_cast | |
#define return | |
#define short | |
#define signed | |
#define sizeof | |
#define static | |
#define static_assert | |
#define static_cast | |
#define struct | |
#define switch | |
#define template | |
#define this | |
#define thread_local | |
#define throw | |
#define true | |
#define try | |
#define typedef | |
#define typeid | |
#define typename | |
#define union | |
#define unsigned | |
#define using | |
#define virtual | |
#define void | |
#define volatile | |
#define wchar_t | |
#define while | |
#define xor | |
#define xor_eq | |
// Check this is all properly defined away. | |
and | |
and_eq | |
alignas | |
alignof | |
asm | |
auto | |
bitand | |
bitor | |
bool | |
break | |
case | |
catch | |
char | |
char16_t | |
char32_t | |
class | |
compl | |
const | |
constexpr | |
const_cast | |
continue | |
decltype | |
default | |
delete | |
double | |
dynamic_cast | |
else | |
enum | |
explicit | |
export | |
extern | |
false | |
float | |
for | |
friend | |
goto | |
if | |
inline | |
int | |
long | |
mutable | |
namespace | |
new | |
noexcept | |
not | |
not_eq | |
nullptr | |
operator | |
or | |
or_eq | |
private | |
protected | |
public | |
register | |
reinterpret_cast | |
return | |
short | |
signed | |
sizeof | |
static | |
static_assert | |
static_cast | |
struct | |
switch | |
template | |
this | |
thread_local | |
throw | |
true | |
try | |
typedef | |
typeid | |
typename | |
union | |
unsigned | |
using | |
virtual | |
void | |
volatile | |
wchar_t | |
while | |
xor | |
xor_eq |