cxx_oper_keyword_ms_compat.cpp revision 6bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89
107a4b0488b03fc1590326ab7c812627a546feb14Nico Weber// RUN: %clang_cc1 %s -E -fms-compatibility
2f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber
3f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberbool f() {
4f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber  // Check that operators still work before redefining them.
5f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#if compl 0 bitand 1
6f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber  return true and false;
7f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#endif
8f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber}
9f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber
106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#ifdef and
116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#endif
126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// The second 'and' is a valid C++ operator name for '&&'.
146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#if defined and and defined(and)
156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#endif
166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
17f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber// All c++ keywords should be #define-able in ms mode.
18f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber// (operators like "and" aren't normally, the rest always is.)
19f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define and
20f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define and_eq
21f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define alignas
22f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define alignof
23f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define asm
24f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define auto
25f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define bitand
26f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define bitor
27f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define bool
28f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define break
29f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define case
30f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define catch
31f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define char
32f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define char16_t
33f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define char32_t
34f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define class
35f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define compl
36f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define const
37f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define constexpr
38f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define const_cast
39f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define continue
40f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define decltype
41f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define default
42f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define delete
43f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define double
44f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define dynamic_cast
45f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define else
46f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define enum
47f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define explicit
48f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define export
49f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define extern
50f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define false
51f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define float
52f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define for
53f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define friend
54f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define goto
55f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define if
56f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define inline
57f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define int
58f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define long
59f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define mutable
60f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define namespace
61f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define new
62f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define noexcept
63f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define not
64f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define not_eq
65f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define nullptr
66f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define operator
67f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define or
68f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define or_eq
69f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define private
70f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define protected
71f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define public
72f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define register
73f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define reinterpret_cast
74f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define return
75f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define short
76f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define signed
77f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define sizeof
78f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define static
79f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define static_assert
80f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define static_cast
81f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define struct
82f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define switch
83f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define template
84f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define this
85f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define thread_local
86f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define throw
87f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define true
88f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define try
89f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define typedef
90f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define typeid
91f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define typename
92f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define union
93f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define unsigned
94f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define using
95f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define virtual
96f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define void
97f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define volatile
98f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define wchar_t
99f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define while
100f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define xor
101f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber#define xor_eq
102f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber
103f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weber// Check this is all properly defined away.
104f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberand
105f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberand_eq
106f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberalignas
107f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberalignof
108f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberasm
109f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberauto
110f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberbitand
111f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberbitor
112f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberbool
113f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberbreak
114f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webercase
115f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webercatch
116f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberchar
117f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberchar16_t
118f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberchar32_t
119f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberclass
120f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webercompl
121f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberconst
122f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberconstexpr
123f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberconst_cast
124f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webercontinue
125f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberdecltype
126f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberdefault
127f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberdelete
128f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberdouble
129f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberdynamic_cast
130f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberelse
131f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberenum
132f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberexplicit
133f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberexport
134f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberextern
135f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberfalse
136f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberfloat
137f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberfor
138f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberfriend
139f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webergoto
140f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberif
141f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberinline
142f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberint
143f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberlong
144f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webermutable
145f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernamespace
146f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernew
147f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernoexcept
148f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernot
149f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernot_eq
150f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webernullptr
151f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberoperator
152f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberor
153f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberor_eq
154f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberprivate
155f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberprotected
156f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberpublic
157f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberregister
158f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberreinterpret_cast
159f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberreturn
160f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webershort
161f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webersigned
162f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webersizeof
163f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberstatic
164f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberstatic_assert
165f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberstatic_cast
166f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberstruct
167f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberswitch
168f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertemplate
169f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberthis
170f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberthread_local
171f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberthrow
172f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertrue
173f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertry
174f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertypedef
175f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertypeid
176f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webertypename
177f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberunion
178f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberunsigned
179f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberusing
180f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webervirtual
181f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webervoid
182f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Webervolatile
183f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberwchar_t
184f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberwhile
185f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberxor
186f4fb07ed4dfd144a39d904fc77b3b0bab580eb2eNico Weberxor_eq
187