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 // <set>
15*2c6217f2SLouis Dionne 
16*2c6217f2SLouis Dionne // Test the feature test macros defined by <set>
17*2c6217f2SLouis Dionne 
18*2c6217f2SLouis Dionne /*  Constant                                       Value
19*2c6217f2SLouis Dionne     __cpp_lib_allocator_traits_is_always_equal     201411L [C++17]
20*2c6217f2SLouis Dionne     __cpp_lib_associative_heterogeneous_erasure    202110L [C++2b]
21*2c6217f2SLouis Dionne     __cpp_lib_erase_if                             202002L [C++20]
22*2c6217f2SLouis Dionne     __cpp_lib_generic_associative_lookup           201304L [C++14]
23*2c6217f2SLouis Dionne     __cpp_lib_node_extract                         201606L [C++17]
24*2c6217f2SLouis Dionne     __cpp_lib_nonmember_container_access           201411L [C++17]
25*2c6217f2SLouis Dionne     __cpp_lib_ranges_to_container                  202202L [C++2b]
26*2c6217f2SLouis Dionne */
27*2c6217f2SLouis Dionne 
28*2c6217f2SLouis Dionne #include <set>
29*2c6217f2SLouis Dionne #include "test_macros.h"
30*2c6217f2SLouis Dionne 
31*2c6217f2SLouis Dionne #if TEST_STD_VER < 14
32*2c6217f2SLouis Dionne 
33*2c6217f2SLouis Dionne # ifdef __cpp_lib_allocator_traits_is_always_equal
34*2c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
35*2c6217f2SLouis Dionne # endif
36*2c6217f2SLouis Dionne 
37*2c6217f2SLouis Dionne # ifdef __cpp_lib_associative_heterogeneous_erasure
38*2c6217f2SLouis Dionne #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b"
39*2c6217f2SLouis Dionne # endif
40*2c6217f2SLouis Dionne 
41*2c6217f2SLouis Dionne # ifdef __cpp_lib_erase_if
42*2c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should not be defined before c++20"
43*2c6217f2SLouis Dionne # endif
44*2c6217f2SLouis Dionne 
45*2c6217f2SLouis Dionne # ifdef __cpp_lib_generic_associative_lookup
46*2c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should not be defined before c++14"
47*2c6217f2SLouis Dionne # endif
48*2c6217f2SLouis Dionne 
49*2c6217f2SLouis Dionne # ifdef __cpp_lib_node_extract
50*2c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should not be defined before c++17"
51*2c6217f2SLouis Dionne # endif
52*2c6217f2SLouis Dionne 
53*2c6217f2SLouis Dionne # ifdef __cpp_lib_nonmember_container_access
54*2c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should not be defined before c++17"
55*2c6217f2SLouis Dionne # endif
56*2c6217f2SLouis Dionne 
57*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_to_container
58*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_to_container should not be defined before c++2b"
59*2c6217f2SLouis Dionne # endif
60*2c6217f2SLouis Dionne 
61*2c6217f2SLouis Dionne #elif TEST_STD_VER == 14
62*2c6217f2SLouis Dionne 
63*2c6217f2SLouis Dionne # ifdef __cpp_lib_allocator_traits_is_always_equal
64*2c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
65*2c6217f2SLouis Dionne # endif
66*2c6217f2SLouis Dionne 
67*2c6217f2SLouis Dionne # ifdef __cpp_lib_associative_heterogeneous_erasure
68*2c6217f2SLouis Dionne #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b"
69*2c6217f2SLouis Dionne # endif
70*2c6217f2SLouis Dionne 
71*2c6217f2SLouis Dionne # ifdef __cpp_lib_erase_if
72*2c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should not be defined before c++20"
73*2c6217f2SLouis Dionne # endif
74*2c6217f2SLouis Dionne 
75*2c6217f2SLouis Dionne # ifndef __cpp_lib_generic_associative_lookup
76*2c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should be defined in c++14"
77*2c6217f2SLouis Dionne # endif
78*2c6217f2SLouis Dionne # if __cpp_lib_generic_associative_lookup != 201304L
79*2c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++14"
80*2c6217f2SLouis Dionne # endif
81*2c6217f2SLouis Dionne 
82*2c6217f2SLouis Dionne # ifdef __cpp_lib_node_extract
83*2c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should not be defined before c++17"
84*2c6217f2SLouis Dionne # endif
85*2c6217f2SLouis Dionne 
86*2c6217f2SLouis Dionne # ifdef __cpp_lib_nonmember_container_access
87*2c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should not be defined before c++17"
88*2c6217f2SLouis Dionne # endif
89*2c6217f2SLouis Dionne 
90*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_to_container
91*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_to_container should not be defined before c++2b"
92*2c6217f2SLouis Dionne # endif
93*2c6217f2SLouis Dionne 
94*2c6217f2SLouis Dionne #elif TEST_STD_VER == 17
95*2c6217f2SLouis Dionne 
96*2c6217f2SLouis Dionne # ifndef __cpp_lib_allocator_traits_is_always_equal
97*2c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
98*2c6217f2SLouis Dionne # endif
99*2c6217f2SLouis Dionne # if __cpp_lib_allocator_traits_is_always_equal != 201411L
100*2c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
101*2c6217f2SLouis Dionne # endif
102*2c6217f2SLouis Dionne 
103*2c6217f2SLouis Dionne # ifdef __cpp_lib_associative_heterogeneous_erasure
104*2c6217f2SLouis Dionne #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b"
105*2c6217f2SLouis Dionne # endif
106*2c6217f2SLouis Dionne 
107*2c6217f2SLouis Dionne # ifdef __cpp_lib_erase_if
108*2c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should not be defined before c++20"
109*2c6217f2SLouis Dionne # endif
110*2c6217f2SLouis Dionne 
111*2c6217f2SLouis Dionne # ifndef __cpp_lib_generic_associative_lookup
112*2c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should be defined in c++17"
113*2c6217f2SLouis Dionne # endif
114*2c6217f2SLouis Dionne # if __cpp_lib_generic_associative_lookup != 201304L
115*2c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++17"
116*2c6217f2SLouis Dionne # endif
117*2c6217f2SLouis Dionne 
118*2c6217f2SLouis Dionne # ifndef __cpp_lib_node_extract
119*2c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should be defined in c++17"
120*2c6217f2SLouis Dionne # endif
121*2c6217f2SLouis Dionne # if __cpp_lib_node_extract != 201606L
122*2c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should have the value 201606L in c++17"
123*2c6217f2SLouis Dionne # endif
124*2c6217f2SLouis Dionne 
125*2c6217f2SLouis Dionne # ifndef __cpp_lib_nonmember_container_access
126*2c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should be defined in c++17"
127*2c6217f2SLouis Dionne # endif
128*2c6217f2SLouis Dionne # if __cpp_lib_nonmember_container_access != 201411L
129*2c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
130*2c6217f2SLouis Dionne # endif
131*2c6217f2SLouis Dionne 
132*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_to_container
133*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_to_container should not be defined before c++2b"
134*2c6217f2SLouis Dionne # endif
135*2c6217f2SLouis Dionne 
136*2c6217f2SLouis Dionne #elif TEST_STD_VER == 20
137*2c6217f2SLouis Dionne 
138*2c6217f2SLouis Dionne # ifndef __cpp_lib_allocator_traits_is_always_equal
139*2c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
140*2c6217f2SLouis Dionne # endif
141*2c6217f2SLouis Dionne # if __cpp_lib_allocator_traits_is_always_equal != 201411L
142*2c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
143*2c6217f2SLouis Dionne # endif
144*2c6217f2SLouis Dionne 
145*2c6217f2SLouis Dionne # ifdef __cpp_lib_associative_heterogeneous_erasure
146*2c6217f2SLouis Dionne #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b"
147*2c6217f2SLouis Dionne # endif
148*2c6217f2SLouis Dionne 
149*2c6217f2SLouis Dionne # ifndef __cpp_lib_erase_if
150*2c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should be defined in c++20"
151*2c6217f2SLouis Dionne # endif
152*2c6217f2SLouis Dionne # if __cpp_lib_erase_if != 202002L
153*2c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should have the value 202002L in c++20"
154*2c6217f2SLouis Dionne # endif
155*2c6217f2SLouis Dionne 
156*2c6217f2SLouis Dionne # ifndef __cpp_lib_generic_associative_lookup
157*2c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should be defined in c++20"
158*2c6217f2SLouis Dionne # endif
159*2c6217f2SLouis Dionne # if __cpp_lib_generic_associative_lookup != 201304L
160*2c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++20"
161*2c6217f2SLouis Dionne # endif
162*2c6217f2SLouis Dionne 
163*2c6217f2SLouis Dionne # ifndef __cpp_lib_node_extract
164*2c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should be defined in c++20"
165*2c6217f2SLouis Dionne # endif
166*2c6217f2SLouis Dionne # if __cpp_lib_node_extract != 201606L
167*2c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should have the value 201606L in c++20"
168*2c6217f2SLouis Dionne # endif
169*2c6217f2SLouis Dionne 
170*2c6217f2SLouis Dionne # ifndef __cpp_lib_nonmember_container_access
171*2c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should be defined in c++20"
172*2c6217f2SLouis Dionne # endif
173*2c6217f2SLouis Dionne # if __cpp_lib_nonmember_container_access != 201411L
174*2c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
175*2c6217f2SLouis Dionne # endif
176*2c6217f2SLouis Dionne 
177*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_to_container
178*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_to_container should not be defined before c++2b"
179*2c6217f2SLouis Dionne # endif
180*2c6217f2SLouis Dionne 
181*2c6217f2SLouis Dionne #elif TEST_STD_VER > 20
182*2c6217f2SLouis Dionne 
183*2c6217f2SLouis Dionne # ifndef __cpp_lib_allocator_traits_is_always_equal
184*2c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++2b"
185*2c6217f2SLouis Dionne # endif
186*2c6217f2SLouis Dionne # if __cpp_lib_allocator_traits_is_always_equal != 201411L
187*2c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++2b"
188*2c6217f2SLouis Dionne # endif
189*2c6217f2SLouis Dionne 
190*2c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
191*2c6217f2SLouis Dionne #   ifndef __cpp_lib_associative_heterogeneous_erasure
192*2c6217f2SLouis Dionne #     error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++2b"
193*2c6217f2SLouis Dionne #   endif
194*2c6217f2SLouis Dionne #   if __cpp_lib_associative_heterogeneous_erasure != 202110L
195*2c6217f2SLouis Dionne #     error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++2b"
196*2c6217f2SLouis Dionne #   endif
197*2c6217f2SLouis Dionne # else // _LIBCPP_VERSION
198*2c6217f2SLouis Dionne #   ifdef __cpp_lib_associative_heterogeneous_erasure
199*2c6217f2SLouis Dionne #     error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
200*2c6217f2SLouis Dionne #   endif
201*2c6217f2SLouis Dionne # endif
202*2c6217f2SLouis Dionne 
203*2c6217f2SLouis Dionne # ifndef __cpp_lib_erase_if
204*2c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should be defined in c++2b"
205*2c6217f2SLouis Dionne # endif
206*2c6217f2SLouis Dionne # if __cpp_lib_erase_if != 202002L
207*2c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should have the value 202002L in c++2b"
208*2c6217f2SLouis Dionne # endif
209*2c6217f2SLouis Dionne 
210*2c6217f2SLouis Dionne # ifndef __cpp_lib_generic_associative_lookup
211*2c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should be defined in c++2b"
212*2c6217f2SLouis Dionne # endif
213*2c6217f2SLouis Dionne # if __cpp_lib_generic_associative_lookup != 201304L
214*2c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++2b"
215*2c6217f2SLouis Dionne # endif
216*2c6217f2SLouis Dionne 
217*2c6217f2SLouis Dionne # ifndef __cpp_lib_node_extract
218*2c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should be defined in c++2b"
219*2c6217f2SLouis Dionne # endif
220*2c6217f2SLouis Dionne # if __cpp_lib_node_extract != 201606L
221*2c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should have the value 201606L in c++2b"
222*2c6217f2SLouis Dionne # endif
223*2c6217f2SLouis Dionne 
224*2c6217f2SLouis Dionne # ifndef __cpp_lib_nonmember_container_access
225*2c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should be defined in c++2b"
226*2c6217f2SLouis Dionne # endif
227*2c6217f2SLouis Dionne # if __cpp_lib_nonmember_container_access != 201411L
228*2c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++2b"
229*2c6217f2SLouis Dionne # endif
230*2c6217f2SLouis Dionne 
231*2c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
232*2c6217f2SLouis Dionne #   ifndef __cpp_lib_ranges_to_container
233*2c6217f2SLouis Dionne #     error "__cpp_lib_ranges_to_container should be defined in c++2b"
234*2c6217f2SLouis Dionne #   endif
235*2c6217f2SLouis Dionne #   if __cpp_lib_ranges_to_container != 202202L
236*2c6217f2SLouis Dionne #     error "__cpp_lib_ranges_to_container should have the value 202202L in c++2b"
237*2c6217f2SLouis Dionne #   endif
238*2c6217f2SLouis Dionne # else // _LIBCPP_VERSION
239*2c6217f2SLouis Dionne #   ifdef __cpp_lib_ranges_to_container
240*2c6217f2SLouis Dionne #     error "__cpp_lib_ranges_to_container should not be defined because it is unimplemented in libc++!"
241*2c6217f2SLouis Dionne #   endif
242*2c6217f2SLouis Dionne # endif
243*2c6217f2SLouis Dionne 
244*2c6217f2SLouis Dionne #endif // TEST_STD_VER > 20
245*2c6217f2SLouis Dionne 
246