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