1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // WARNING: This test was generated by generate_feature_test_macro_components.py
10 // and should not be edited manually.
11 //
12 // clang-format off
13 
14 // <map>
15 
16 // Test the feature test macros defined by <map>
17 
18 /*  Constant                                         Value
19     __cpp_lib_allocator_traits_is_always_equal       201411L [C++17]
20     __cpp_lib_associative_heterogeneous_erasure      202110L [C++23]
21     __cpp_lib_associative_heterogeneous_insertion    202306L [C++26]
22     __cpp_lib_containers_ranges                      202202L [C++23]
23     __cpp_lib_erase_if                               202002L [C++20]
24     __cpp_lib_generic_associative_lookup             201304L [C++14]
25     __cpp_lib_map_try_emplace                        201411L [C++17]
26     __cpp_lib_node_extract                           201606L [C++17]
27     __cpp_lib_nonmember_container_access             201411L [C++17]
28     __cpp_lib_tuple_like                             202207L [C++23]
29                                                      202311L [C++26]
30 */
31 
32 #include <map>
33 #include "test_macros.h"
34 
35 #if TEST_STD_VER < 14
36 
37 # ifdef __cpp_lib_allocator_traits_is_always_equal
38 #   error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
39 # endif
40 
41 # ifdef __cpp_lib_associative_heterogeneous_erasure
42 #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
43 # endif
44 
45 # ifdef __cpp_lib_associative_heterogeneous_insertion
46 #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
47 # endif
48 
49 # ifdef __cpp_lib_containers_ranges
50 #   error "__cpp_lib_containers_ranges should not be defined before c++23"
51 # endif
52 
53 # ifdef __cpp_lib_erase_if
54 #   error "__cpp_lib_erase_if should not be defined before c++20"
55 # endif
56 
57 # ifdef __cpp_lib_generic_associative_lookup
58 #   error "__cpp_lib_generic_associative_lookup should not be defined before c++14"
59 # endif
60 
61 # ifdef __cpp_lib_map_try_emplace
62 #   error "__cpp_lib_map_try_emplace should not be defined before c++17"
63 # endif
64 
65 # ifdef __cpp_lib_node_extract
66 #   error "__cpp_lib_node_extract should not be defined before c++17"
67 # endif
68 
69 # ifdef __cpp_lib_nonmember_container_access
70 #   error "__cpp_lib_nonmember_container_access should not be defined before c++17"
71 # endif
72 
73 # ifdef __cpp_lib_tuple_like
74 #   error "__cpp_lib_tuple_like should not be defined before c++23"
75 # endif
76 
77 #elif TEST_STD_VER == 14
78 
79 # ifdef __cpp_lib_allocator_traits_is_always_equal
80 #   error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
81 # endif
82 
83 # ifdef __cpp_lib_associative_heterogeneous_erasure
84 #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
85 # endif
86 
87 # ifdef __cpp_lib_associative_heterogeneous_insertion
88 #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
89 # endif
90 
91 # ifdef __cpp_lib_containers_ranges
92 #   error "__cpp_lib_containers_ranges should not be defined before c++23"
93 # endif
94 
95 # ifdef __cpp_lib_erase_if
96 #   error "__cpp_lib_erase_if should not be defined before c++20"
97 # endif
98 
99 # ifndef __cpp_lib_generic_associative_lookup
100 #   error "__cpp_lib_generic_associative_lookup should be defined in c++14"
101 # endif
102 # if __cpp_lib_generic_associative_lookup != 201304L
103 #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++14"
104 # endif
105 
106 # ifdef __cpp_lib_map_try_emplace
107 #   error "__cpp_lib_map_try_emplace should not be defined before c++17"
108 # endif
109 
110 # ifdef __cpp_lib_node_extract
111 #   error "__cpp_lib_node_extract should not be defined before c++17"
112 # endif
113 
114 # ifdef __cpp_lib_nonmember_container_access
115 #   error "__cpp_lib_nonmember_container_access should not be defined before c++17"
116 # endif
117 
118 # ifdef __cpp_lib_tuple_like
119 #   error "__cpp_lib_tuple_like should not be defined before c++23"
120 # endif
121 
122 #elif TEST_STD_VER == 17
123 
124 # ifndef __cpp_lib_allocator_traits_is_always_equal
125 #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
126 # endif
127 # if __cpp_lib_allocator_traits_is_always_equal != 201411L
128 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
129 # endif
130 
131 # ifdef __cpp_lib_associative_heterogeneous_erasure
132 #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
133 # endif
134 
135 # ifdef __cpp_lib_associative_heterogeneous_insertion
136 #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
137 # endif
138 
139 # ifdef __cpp_lib_containers_ranges
140 #   error "__cpp_lib_containers_ranges should not be defined before c++23"
141 # endif
142 
143 # ifdef __cpp_lib_erase_if
144 #   error "__cpp_lib_erase_if should not be defined before c++20"
145 # endif
146 
147 # ifndef __cpp_lib_generic_associative_lookup
148 #   error "__cpp_lib_generic_associative_lookup should be defined in c++17"
149 # endif
150 # if __cpp_lib_generic_associative_lookup != 201304L
151 #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++17"
152 # endif
153 
154 # ifndef __cpp_lib_map_try_emplace
155 #   error "__cpp_lib_map_try_emplace should be defined in c++17"
156 # endif
157 # if __cpp_lib_map_try_emplace != 201411L
158 #   error "__cpp_lib_map_try_emplace should have the value 201411L in c++17"
159 # endif
160 
161 # ifndef __cpp_lib_node_extract
162 #   error "__cpp_lib_node_extract should be defined in c++17"
163 # endif
164 # if __cpp_lib_node_extract != 201606L
165 #   error "__cpp_lib_node_extract should have the value 201606L in c++17"
166 # endif
167 
168 # ifndef __cpp_lib_nonmember_container_access
169 #   error "__cpp_lib_nonmember_container_access should be defined in c++17"
170 # endif
171 # if __cpp_lib_nonmember_container_access != 201411L
172 #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
173 # endif
174 
175 # ifdef __cpp_lib_tuple_like
176 #   error "__cpp_lib_tuple_like should not be defined before c++23"
177 # endif
178 
179 #elif TEST_STD_VER == 20
180 
181 # ifndef __cpp_lib_allocator_traits_is_always_equal
182 #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
183 # endif
184 # if __cpp_lib_allocator_traits_is_always_equal != 201411L
185 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
186 # endif
187 
188 # ifdef __cpp_lib_associative_heterogeneous_erasure
189 #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
190 # endif
191 
192 # ifdef __cpp_lib_associative_heterogeneous_insertion
193 #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
194 # endif
195 
196 # ifdef __cpp_lib_containers_ranges
197 #   error "__cpp_lib_containers_ranges should not be defined before c++23"
198 # endif
199 
200 # ifndef __cpp_lib_erase_if
201 #   error "__cpp_lib_erase_if should be defined in c++20"
202 # endif
203 # if __cpp_lib_erase_if != 202002L
204 #   error "__cpp_lib_erase_if should have the value 202002L in c++20"
205 # endif
206 
207 # ifndef __cpp_lib_generic_associative_lookup
208 #   error "__cpp_lib_generic_associative_lookup should be defined in c++20"
209 # endif
210 # if __cpp_lib_generic_associative_lookup != 201304L
211 #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++20"
212 # endif
213 
214 # ifndef __cpp_lib_map_try_emplace
215 #   error "__cpp_lib_map_try_emplace should be defined in c++20"
216 # endif
217 # if __cpp_lib_map_try_emplace != 201411L
218 #   error "__cpp_lib_map_try_emplace should have the value 201411L in c++20"
219 # endif
220 
221 # ifndef __cpp_lib_node_extract
222 #   error "__cpp_lib_node_extract should be defined in c++20"
223 # endif
224 # if __cpp_lib_node_extract != 201606L
225 #   error "__cpp_lib_node_extract should have the value 201606L in c++20"
226 # endif
227 
228 # ifndef __cpp_lib_nonmember_container_access
229 #   error "__cpp_lib_nonmember_container_access should be defined in c++20"
230 # endif
231 # if __cpp_lib_nonmember_container_access != 201411L
232 #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
233 # endif
234 
235 # ifdef __cpp_lib_tuple_like
236 #   error "__cpp_lib_tuple_like should not be defined before c++23"
237 # endif
238 
239 #elif TEST_STD_VER == 23
240 
241 # ifndef __cpp_lib_allocator_traits_is_always_equal
242 #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
243 # endif
244 # if __cpp_lib_allocator_traits_is_always_equal != 201411L
245 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
246 # endif
247 
248 # if !defined(_LIBCPP_VERSION)
249 #   ifndef __cpp_lib_associative_heterogeneous_erasure
250 #     error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++23"
251 #   endif
252 #   if __cpp_lib_associative_heterogeneous_erasure != 202110L
253 #     error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++23"
254 #   endif
255 # else // _LIBCPP_VERSION
256 #   ifdef __cpp_lib_associative_heterogeneous_erasure
257 #     error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
258 #   endif
259 # endif
260 
261 # ifdef __cpp_lib_associative_heterogeneous_insertion
262 #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
263 # endif
264 
265 # ifndef __cpp_lib_containers_ranges
266 #   error "__cpp_lib_containers_ranges should be defined in c++23"
267 # endif
268 # if __cpp_lib_containers_ranges != 202202L
269 #   error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
270 # endif
271 
272 # ifndef __cpp_lib_erase_if
273 #   error "__cpp_lib_erase_if should be defined in c++23"
274 # endif
275 # if __cpp_lib_erase_if != 202002L
276 #   error "__cpp_lib_erase_if should have the value 202002L in c++23"
277 # endif
278 
279 # ifndef __cpp_lib_generic_associative_lookup
280 #   error "__cpp_lib_generic_associative_lookup should be defined in c++23"
281 # endif
282 # if __cpp_lib_generic_associative_lookup != 201304L
283 #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++23"
284 # endif
285 
286 # ifndef __cpp_lib_map_try_emplace
287 #   error "__cpp_lib_map_try_emplace should be defined in c++23"
288 # endif
289 # if __cpp_lib_map_try_emplace != 201411L
290 #   error "__cpp_lib_map_try_emplace should have the value 201411L in c++23"
291 # endif
292 
293 # ifndef __cpp_lib_node_extract
294 #   error "__cpp_lib_node_extract should be defined in c++23"
295 # endif
296 # if __cpp_lib_node_extract != 201606L
297 #   error "__cpp_lib_node_extract should have the value 201606L in c++23"
298 # endif
299 
300 # ifndef __cpp_lib_nonmember_container_access
301 #   error "__cpp_lib_nonmember_container_access should be defined in c++23"
302 # endif
303 # if __cpp_lib_nonmember_container_access != 201411L
304 #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
305 # endif
306 
307 # if !defined(_LIBCPP_VERSION)
308 #   ifndef __cpp_lib_tuple_like
309 #     error "__cpp_lib_tuple_like should be defined in c++23"
310 #   endif
311 #   if __cpp_lib_tuple_like != 202207L
312 #     error "__cpp_lib_tuple_like should have the value 202207L in c++23"
313 #   endif
314 # else // _LIBCPP_VERSION
315 #   ifdef __cpp_lib_tuple_like
316 #     error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
317 #   endif
318 # endif
319 
320 #elif TEST_STD_VER > 23
321 
322 # ifndef __cpp_lib_allocator_traits_is_always_equal
323 #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
324 # endif
325 # if __cpp_lib_allocator_traits_is_always_equal != 201411L
326 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
327 # endif
328 
329 # if !defined(_LIBCPP_VERSION)
330 #   ifndef __cpp_lib_associative_heterogeneous_erasure
331 #     error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++26"
332 #   endif
333 #   if __cpp_lib_associative_heterogeneous_erasure != 202110L
334 #     error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++26"
335 #   endif
336 # else // _LIBCPP_VERSION
337 #   ifdef __cpp_lib_associative_heterogeneous_erasure
338 #     error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
339 #   endif
340 # endif
341 
342 # if !defined(_LIBCPP_VERSION)
343 #   ifndef __cpp_lib_associative_heterogeneous_insertion
344 #     error "__cpp_lib_associative_heterogeneous_insertion should be defined in c++26"
345 #   endif
346 #   if __cpp_lib_associative_heterogeneous_insertion != 202306L
347 #     error "__cpp_lib_associative_heterogeneous_insertion should have the value 202306L in c++26"
348 #   endif
349 # else // _LIBCPP_VERSION
350 #   ifdef __cpp_lib_associative_heterogeneous_insertion
351 #     error "__cpp_lib_associative_heterogeneous_insertion should not be defined because it is unimplemented in libc++!"
352 #   endif
353 # endif
354 
355 # ifndef __cpp_lib_containers_ranges
356 #   error "__cpp_lib_containers_ranges should be defined in c++26"
357 # endif
358 # if __cpp_lib_containers_ranges != 202202L
359 #   error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
360 # endif
361 
362 # ifndef __cpp_lib_erase_if
363 #   error "__cpp_lib_erase_if should be defined in c++26"
364 # endif
365 # if __cpp_lib_erase_if != 202002L
366 #   error "__cpp_lib_erase_if should have the value 202002L in c++26"
367 # endif
368 
369 # ifndef __cpp_lib_generic_associative_lookup
370 #   error "__cpp_lib_generic_associative_lookup should be defined in c++26"
371 # endif
372 # if __cpp_lib_generic_associative_lookup != 201304L
373 #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++26"
374 # endif
375 
376 # ifndef __cpp_lib_map_try_emplace
377 #   error "__cpp_lib_map_try_emplace should be defined in c++26"
378 # endif
379 # if __cpp_lib_map_try_emplace != 201411L
380 #   error "__cpp_lib_map_try_emplace should have the value 201411L in c++26"
381 # endif
382 
383 # ifndef __cpp_lib_node_extract
384 #   error "__cpp_lib_node_extract should be defined in c++26"
385 # endif
386 # if __cpp_lib_node_extract != 201606L
387 #   error "__cpp_lib_node_extract should have the value 201606L in c++26"
388 # endif
389 
390 # ifndef __cpp_lib_nonmember_container_access
391 #   error "__cpp_lib_nonmember_container_access should be defined in c++26"
392 # endif
393 # if __cpp_lib_nonmember_container_access != 201411L
394 #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
395 # endif
396 
397 # if !defined(_LIBCPP_VERSION)
398 #   ifndef __cpp_lib_tuple_like
399 #     error "__cpp_lib_tuple_like should be defined in c++26"
400 #   endif
401 #   if __cpp_lib_tuple_like != 202311L
402 #     error "__cpp_lib_tuple_like should have the value 202311L in c++26"
403 #   endif
404 # else // _LIBCPP_VERSION
405 #   ifdef __cpp_lib_tuple_like
406 #     error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
407 #   endif
408 # endif
409 
410 #endif // TEST_STD_VER > 23
411 
412