1*2c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
2*2c6217f2SLouis Dionne //
3*2c6217f2SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2c6217f2SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5*2c6217f2SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*2c6217f2SLouis Dionne //
7*2c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
8*2c6217f2SLouis Dionne //
9*2c6217f2SLouis Dionne // WARNING: This test was generated by generate_feature_test_macro_components.py
10*2c6217f2SLouis Dionne // and should not be edited manually.
11*2c6217f2SLouis Dionne //
12*2c6217f2SLouis Dionne // clang-format off
13*2c6217f2SLouis Dionne 
14*2c6217f2SLouis Dionne // <utility>
15*2c6217f2SLouis Dionne 
16*2c6217f2SLouis Dionne // Test the feature test macros defined by <utility>
17*2c6217f2SLouis Dionne 
18*2c6217f2SLouis Dionne /*  Constant                                  Value
19*2c6217f2SLouis Dionne     __cpp_lib_as_const                        201510L [C++17]
20*2c6217f2SLouis Dionne     __cpp_lib_constexpr_utility               201811L [C++20]
21*2c6217f2SLouis Dionne     __cpp_lib_exchange_function               201304L [C++14]
22*2c6217f2SLouis Dionne     __cpp_lib_integer_comparison_functions    202002L [C++20]
23*2c6217f2SLouis Dionne     __cpp_lib_integer_sequence                201304L [C++14]
24*2c6217f2SLouis Dionne     __cpp_lib_ranges_zip                      202110L [C++2b]
25*2c6217f2SLouis Dionne     __cpp_lib_to_underlying                   202102L [C++2b]
26*2c6217f2SLouis Dionne     __cpp_lib_tuples_by_type                  201304L [C++14]
27*2c6217f2SLouis Dionne     __cpp_lib_unreachable                     202202L [C++2b]
28*2c6217f2SLouis Dionne */
29*2c6217f2SLouis Dionne 
30*2c6217f2SLouis Dionne #include <utility>
31*2c6217f2SLouis Dionne #include "test_macros.h"
32*2c6217f2SLouis Dionne 
33*2c6217f2SLouis Dionne #if TEST_STD_VER < 14
34*2c6217f2SLouis Dionne 
35*2c6217f2SLouis Dionne # ifdef __cpp_lib_as_const
36*2c6217f2SLouis Dionne #   error "__cpp_lib_as_const should not be defined before c++17"
37*2c6217f2SLouis Dionne # endif
38*2c6217f2SLouis Dionne 
39*2c6217f2SLouis Dionne # ifdef __cpp_lib_constexpr_utility
40*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_utility should not be defined before c++20"
41*2c6217f2SLouis Dionne # endif
42*2c6217f2SLouis Dionne 
43*2c6217f2SLouis Dionne # ifdef __cpp_lib_exchange_function
44*2c6217f2SLouis Dionne #   error "__cpp_lib_exchange_function should not be defined before c++14"
45*2c6217f2SLouis Dionne # endif
46*2c6217f2SLouis Dionne 
47*2c6217f2SLouis Dionne # ifdef __cpp_lib_integer_comparison_functions
48*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
49*2c6217f2SLouis Dionne # endif
50*2c6217f2SLouis Dionne 
51*2c6217f2SLouis Dionne # ifdef __cpp_lib_integer_sequence
52*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_sequence should not be defined before c++14"
53*2c6217f2SLouis Dionne # endif
54*2c6217f2SLouis Dionne 
55*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_zip
56*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_zip should not be defined before c++2b"
57*2c6217f2SLouis Dionne # endif
58*2c6217f2SLouis Dionne 
59*2c6217f2SLouis Dionne # ifdef __cpp_lib_to_underlying
60*2c6217f2SLouis Dionne #   error "__cpp_lib_to_underlying should not be defined before c++2b"
61*2c6217f2SLouis Dionne # endif
62*2c6217f2SLouis Dionne 
63*2c6217f2SLouis Dionne # ifdef __cpp_lib_tuples_by_type
64*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should not be defined before c++14"
65*2c6217f2SLouis Dionne # endif
66*2c6217f2SLouis Dionne 
67*2c6217f2SLouis Dionne # ifdef __cpp_lib_unreachable
68*2c6217f2SLouis Dionne #   error "__cpp_lib_unreachable should not be defined before c++2b"
69*2c6217f2SLouis Dionne # endif
70*2c6217f2SLouis Dionne 
71*2c6217f2SLouis Dionne #elif TEST_STD_VER == 14
72*2c6217f2SLouis Dionne 
73*2c6217f2SLouis Dionne # ifdef __cpp_lib_as_const
74*2c6217f2SLouis Dionne #   error "__cpp_lib_as_const should not be defined before c++17"
75*2c6217f2SLouis Dionne # endif
76*2c6217f2SLouis Dionne 
77*2c6217f2SLouis Dionne # ifdef __cpp_lib_constexpr_utility
78*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_utility should not be defined before c++20"
79*2c6217f2SLouis Dionne # endif
80*2c6217f2SLouis Dionne 
81*2c6217f2SLouis Dionne # ifndef __cpp_lib_exchange_function
82*2c6217f2SLouis Dionne #   error "__cpp_lib_exchange_function should be defined in c++14"
83*2c6217f2SLouis Dionne # endif
84*2c6217f2SLouis Dionne # if __cpp_lib_exchange_function != 201304L
85*2c6217f2SLouis Dionne #   error "__cpp_lib_exchange_function should have the value 201304L in c++14"
86*2c6217f2SLouis Dionne # endif
87*2c6217f2SLouis Dionne 
88*2c6217f2SLouis Dionne # ifdef __cpp_lib_integer_comparison_functions
89*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
90*2c6217f2SLouis Dionne # endif
91*2c6217f2SLouis Dionne 
92*2c6217f2SLouis Dionne # ifndef __cpp_lib_integer_sequence
93*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_sequence should be defined in c++14"
94*2c6217f2SLouis Dionne # endif
95*2c6217f2SLouis Dionne # if __cpp_lib_integer_sequence != 201304L
96*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_sequence should have the value 201304L in c++14"
97*2c6217f2SLouis Dionne # endif
98*2c6217f2SLouis Dionne 
99*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_zip
100*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_zip should not be defined before c++2b"
101*2c6217f2SLouis Dionne # endif
102*2c6217f2SLouis Dionne 
103*2c6217f2SLouis Dionne # ifdef __cpp_lib_to_underlying
104*2c6217f2SLouis Dionne #   error "__cpp_lib_to_underlying should not be defined before c++2b"
105*2c6217f2SLouis Dionne # endif
106*2c6217f2SLouis Dionne 
107*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuples_by_type
108*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should be defined in c++14"
109*2c6217f2SLouis Dionne # endif
110*2c6217f2SLouis Dionne # if __cpp_lib_tuples_by_type != 201304L
111*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should have the value 201304L in c++14"
112*2c6217f2SLouis Dionne # endif
113*2c6217f2SLouis Dionne 
114*2c6217f2SLouis Dionne # ifdef __cpp_lib_unreachable
115*2c6217f2SLouis Dionne #   error "__cpp_lib_unreachable should not be defined before c++2b"
116*2c6217f2SLouis Dionne # endif
117*2c6217f2SLouis Dionne 
118*2c6217f2SLouis Dionne #elif TEST_STD_VER == 17
119*2c6217f2SLouis Dionne 
120*2c6217f2SLouis Dionne # ifndef __cpp_lib_as_const
121*2c6217f2SLouis Dionne #   error "__cpp_lib_as_const should be defined in c++17"
122*2c6217f2SLouis Dionne # endif
123*2c6217f2SLouis Dionne # if __cpp_lib_as_const != 201510L
124*2c6217f2SLouis Dionne #   error "__cpp_lib_as_const should have the value 201510L in c++17"
125*2c6217f2SLouis Dionne # endif
126*2c6217f2SLouis Dionne 
127*2c6217f2SLouis Dionne # ifdef __cpp_lib_constexpr_utility
128*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_utility should not be defined before c++20"
129*2c6217f2SLouis Dionne # endif
130*2c6217f2SLouis Dionne 
131*2c6217f2SLouis Dionne # ifndef __cpp_lib_exchange_function
132*2c6217f2SLouis Dionne #   error "__cpp_lib_exchange_function should be defined in c++17"
133*2c6217f2SLouis Dionne # endif
134*2c6217f2SLouis Dionne # if __cpp_lib_exchange_function != 201304L
135*2c6217f2SLouis Dionne #   error "__cpp_lib_exchange_function should have the value 201304L in c++17"
136*2c6217f2SLouis Dionne # endif
137*2c6217f2SLouis Dionne 
138*2c6217f2SLouis Dionne # ifdef __cpp_lib_integer_comparison_functions
139*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
140*2c6217f2SLouis Dionne # endif
141*2c6217f2SLouis Dionne 
142*2c6217f2SLouis Dionne # ifndef __cpp_lib_integer_sequence
143*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_sequence should be defined in c++17"
144*2c6217f2SLouis Dionne # endif
145*2c6217f2SLouis Dionne # if __cpp_lib_integer_sequence != 201304L
146*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_sequence should have the value 201304L in c++17"
147*2c6217f2SLouis Dionne # endif
148*2c6217f2SLouis Dionne 
149*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_zip
150*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_zip should not be defined before c++2b"
151*2c6217f2SLouis Dionne # endif
152*2c6217f2SLouis Dionne 
153*2c6217f2SLouis Dionne # ifdef __cpp_lib_to_underlying
154*2c6217f2SLouis Dionne #   error "__cpp_lib_to_underlying should not be defined before c++2b"
155*2c6217f2SLouis Dionne # endif
156*2c6217f2SLouis Dionne 
157*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuples_by_type
158*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should be defined in c++17"
159*2c6217f2SLouis Dionne # endif
160*2c6217f2SLouis Dionne # if __cpp_lib_tuples_by_type != 201304L
161*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should have the value 201304L in c++17"
162*2c6217f2SLouis Dionne # endif
163*2c6217f2SLouis Dionne 
164*2c6217f2SLouis Dionne # ifdef __cpp_lib_unreachable
165*2c6217f2SLouis Dionne #   error "__cpp_lib_unreachable should not be defined before c++2b"
166*2c6217f2SLouis Dionne # endif
167*2c6217f2SLouis Dionne 
168*2c6217f2SLouis Dionne #elif TEST_STD_VER == 20
169*2c6217f2SLouis Dionne 
170*2c6217f2SLouis Dionne # ifndef __cpp_lib_as_const
171*2c6217f2SLouis Dionne #   error "__cpp_lib_as_const should be defined in c++20"
172*2c6217f2SLouis Dionne # endif
173*2c6217f2SLouis Dionne # if __cpp_lib_as_const != 201510L
174*2c6217f2SLouis Dionne #   error "__cpp_lib_as_const should have the value 201510L in c++20"
175*2c6217f2SLouis Dionne # endif
176*2c6217f2SLouis Dionne 
177*2c6217f2SLouis Dionne # ifndef __cpp_lib_constexpr_utility
178*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_utility should be defined in c++20"
179*2c6217f2SLouis Dionne # endif
180*2c6217f2SLouis Dionne # if __cpp_lib_constexpr_utility != 201811L
181*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_utility should have the value 201811L in c++20"
182*2c6217f2SLouis Dionne # endif
183*2c6217f2SLouis Dionne 
184*2c6217f2SLouis Dionne # ifndef __cpp_lib_exchange_function
185*2c6217f2SLouis Dionne #   error "__cpp_lib_exchange_function should be defined in c++20"
186*2c6217f2SLouis Dionne # endif
187*2c6217f2SLouis Dionne # if __cpp_lib_exchange_function != 201304L
188*2c6217f2SLouis Dionne #   error "__cpp_lib_exchange_function should have the value 201304L in c++20"
189*2c6217f2SLouis Dionne # endif
190*2c6217f2SLouis Dionne 
191*2c6217f2SLouis Dionne # ifndef __cpp_lib_integer_comparison_functions
192*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_comparison_functions should be defined in c++20"
193*2c6217f2SLouis Dionne # endif
194*2c6217f2SLouis Dionne # if __cpp_lib_integer_comparison_functions != 202002L
195*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++20"
196*2c6217f2SLouis Dionne # endif
197*2c6217f2SLouis Dionne 
198*2c6217f2SLouis Dionne # ifndef __cpp_lib_integer_sequence
199*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_sequence should be defined in c++20"
200*2c6217f2SLouis Dionne # endif
201*2c6217f2SLouis Dionne # if __cpp_lib_integer_sequence != 201304L
202*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_sequence should have the value 201304L in c++20"
203*2c6217f2SLouis Dionne # endif
204*2c6217f2SLouis Dionne 
205*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_zip
206*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_zip should not be defined before c++2b"
207*2c6217f2SLouis Dionne # endif
208*2c6217f2SLouis Dionne 
209*2c6217f2SLouis Dionne # ifdef __cpp_lib_to_underlying
210*2c6217f2SLouis Dionne #   error "__cpp_lib_to_underlying should not be defined before c++2b"
211*2c6217f2SLouis Dionne # endif
212*2c6217f2SLouis Dionne 
213*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuples_by_type
214*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should be defined in c++20"
215*2c6217f2SLouis Dionne # endif
216*2c6217f2SLouis Dionne # if __cpp_lib_tuples_by_type != 201304L
217*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should have the value 201304L in c++20"
218*2c6217f2SLouis Dionne # endif
219*2c6217f2SLouis Dionne 
220*2c6217f2SLouis Dionne # ifdef __cpp_lib_unreachable
221*2c6217f2SLouis Dionne #   error "__cpp_lib_unreachable should not be defined before c++2b"
222*2c6217f2SLouis Dionne # endif
223*2c6217f2SLouis Dionne 
224*2c6217f2SLouis Dionne #elif TEST_STD_VER > 20
225*2c6217f2SLouis Dionne 
226*2c6217f2SLouis Dionne # ifndef __cpp_lib_as_const
227*2c6217f2SLouis Dionne #   error "__cpp_lib_as_const should be defined in c++2b"
228*2c6217f2SLouis Dionne # endif
229*2c6217f2SLouis Dionne # if __cpp_lib_as_const != 201510L
230*2c6217f2SLouis Dionne #   error "__cpp_lib_as_const should have the value 201510L in c++2b"
231*2c6217f2SLouis Dionne # endif
232*2c6217f2SLouis Dionne 
233*2c6217f2SLouis Dionne # ifndef __cpp_lib_constexpr_utility
234*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_utility should be defined in c++2b"
235*2c6217f2SLouis Dionne # endif
236*2c6217f2SLouis Dionne # if __cpp_lib_constexpr_utility != 201811L
237*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_utility should have the value 201811L in c++2b"
238*2c6217f2SLouis Dionne # endif
239*2c6217f2SLouis Dionne 
240*2c6217f2SLouis Dionne # ifndef __cpp_lib_exchange_function
241*2c6217f2SLouis Dionne #   error "__cpp_lib_exchange_function should be defined in c++2b"
242*2c6217f2SLouis Dionne # endif
243*2c6217f2SLouis Dionne # if __cpp_lib_exchange_function != 201304L
244*2c6217f2SLouis Dionne #   error "__cpp_lib_exchange_function should have the value 201304L in c++2b"
245*2c6217f2SLouis Dionne # endif
246*2c6217f2SLouis Dionne 
247*2c6217f2SLouis Dionne # ifndef __cpp_lib_integer_comparison_functions
248*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_comparison_functions should be defined in c++2b"
249*2c6217f2SLouis Dionne # endif
250*2c6217f2SLouis Dionne # if __cpp_lib_integer_comparison_functions != 202002L
251*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++2b"
252*2c6217f2SLouis Dionne # endif
253*2c6217f2SLouis Dionne 
254*2c6217f2SLouis Dionne # ifndef __cpp_lib_integer_sequence
255*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_sequence should be defined in c++2b"
256*2c6217f2SLouis Dionne # endif
257*2c6217f2SLouis Dionne # if __cpp_lib_integer_sequence != 201304L
258*2c6217f2SLouis Dionne #   error "__cpp_lib_integer_sequence should have the value 201304L in c++2b"
259*2c6217f2SLouis Dionne # endif
260*2c6217f2SLouis Dionne 
261*2c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
262*2c6217f2SLouis Dionne #   ifndef __cpp_lib_ranges_zip
263*2c6217f2SLouis Dionne #     error "__cpp_lib_ranges_zip should be defined in c++2b"
264*2c6217f2SLouis Dionne #   endif
265*2c6217f2SLouis Dionne #   if __cpp_lib_ranges_zip != 202110L
266*2c6217f2SLouis Dionne #     error "__cpp_lib_ranges_zip should have the value 202110L in c++2b"
267*2c6217f2SLouis Dionne #   endif
268*2c6217f2SLouis Dionne # else // _LIBCPP_VERSION
269*2c6217f2SLouis Dionne #   ifdef __cpp_lib_ranges_zip
270*2c6217f2SLouis Dionne #     error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!"
271*2c6217f2SLouis Dionne #   endif
272*2c6217f2SLouis Dionne # endif
273*2c6217f2SLouis Dionne 
274*2c6217f2SLouis Dionne # ifndef __cpp_lib_to_underlying
275*2c6217f2SLouis Dionne #   error "__cpp_lib_to_underlying should be defined in c++2b"
276*2c6217f2SLouis Dionne # endif
277*2c6217f2SLouis Dionne # if __cpp_lib_to_underlying != 202102L
278*2c6217f2SLouis Dionne #   error "__cpp_lib_to_underlying should have the value 202102L in c++2b"
279*2c6217f2SLouis Dionne # endif
280*2c6217f2SLouis Dionne 
281*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuples_by_type
282*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should be defined in c++2b"
283*2c6217f2SLouis Dionne # endif
284*2c6217f2SLouis Dionne # if __cpp_lib_tuples_by_type != 201304L
285*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should have the value 201304L in c++2b"
286*2c6217f2SLouis Dionne # endif
287*2c6217f2SLouis Dionne 
288*2c6217f2SLouis Dionne # ifndef __cpp_lib_unreachable
289*2c6217f2SLouis Dionne #   error "__cpp_lib_unreachable should be defined in c++2b"
290*2c6217f2SLouis Dionne # endif
291*2c6217f2SLouis Dionne # if __cpp_lib_unreachable != 202202L
292*2c6217f2SLouis Dionne #   error "__cpp_lib_unreachable should have the value 202202L in c++2b"
293*2c6217f2SLouis Dionne # endif
294*2c6217f2SLouis Dionne 
295*2c6217f2SLouis Dionne #endif // TEST_STD_VER > 20
296*2c6217f2SLouis Dionne 
297