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 // <unordered_map>
15 
16 // Test the feature test macros defined by <unordered_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_unordered_lookup               201811L [C++20]
25     __cpp_lib_node_extract                           201606L [C++17]
26     __cpp_lib_nonmember_container_access             201411L [C++17]
27     __cpp_lib_tuple_like                             202207L [C++23]
28                                                      202311L [C++26]
29     __cpp_lib_unordered_map_try_emplace              201411L [C++17]
30 */
31 
32 #include <unordered_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_unordered_lookup
58 #   error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
59 # endif
60 
61 # ifdef __cpp_lib_node_extract
62 #   error "__cpp_lib_node_extract should not be defined before c++17"
63 # endif
64 
65 # ifdef __cpp_lib_nonmember_container_access
66 #   error "__cpp_lib_nonmember_container_access should not be defined before c++17"
67 # endif
68 
69 # ifdef __cpp_lib_tuple_like
70 #   error "__cpp_lib_tuple_like should not be defined before c++23"
71 # endif
72 
73 # ifdef __cpp_lib_unordered_map_try_emplace
74 #   error "__cpp_lib_unordered_map_try_emplace should not be defined before c++17"
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 # ifdef __cpp_lib_generic_unordered_lookup
100 #   error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
101 # endif
102 
103 # ifdef __cpp_lib_node_extract
104 #   error "__cpp_lib_node_extract should not be defined before c++17"
105 # endif
106 
107 # ifdef __cpp_lib_nonmember_container_access
108 #   error "__cpp_lib_nonmember_container_access should not be defined before c++17"
109 # endif
110 
111 # ifdef __cpp_lib_tuple_like
112 #   error "__cpp_lib_tuple_like should not be defined before c++23"
113 # endif
114 
115 # ifdef __cpp_lib_unordered_map_try_emplace
116 #   error "__cpp_lib_unordered_map_try_emplace should not be defined before c++17"
117 # endif
118 
119 #elif TEST_STD_VER == 17
120 
121 # ifndef __cpp_lib_allocator_traits_is_always_equal
122 #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
123 # endif
124 # if __cpp_lib_allocator_traits_is_always_equal != 201411L
125 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
126 # endif
127 
128 # ifdef __cpp_lib_associative_heterogeneous_erasure
129 #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
130 # endif
131 
132 # ifdef __cpp_lib_associative_heterogeneous_insertion
133 #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
134 # endif
135 
136 # ifdef __cpp_lib_containers_ranges
137 #   error "__cpp_lib_containers_ranges should not be defined before c++23"
138 # endif
139 
140 # ifdef __cpp_lib_erase_if
141 #   error "__cpp_lib_erase_if should not be defined before c++20"
142 # endif
143 
144 # ifdef __cpp_lib_generic_unordered_lookup
145 #   error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
146 # endif
147 
148 # ifndef __cpp_lib_node_extract
149 #   error "__cpp_lib_node_extract should be defined in c++17"
150 # endif
151 # if __cpp_lib_node_extract != 201606L
152 #   error "__cpp_lib_node_extract should have the value 201606L in c++17"
153 # endif
154 
155 # ifndef __cpp_lib_nonmember_container_access
156 #   error "__cpp_lib_nonmember_container_access should be defined in c++17"
157 # endif
158 # if __cpp_lib_nonmember_container_access != 201411L
159 #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
160 # endif
161 
162 # ifdef __cpp_lib_tuple_like
163 #   error "__cpp_lib_tuple_like should not be defined before c++23"
164 # endif
165 
166 # ifndef __cpp_lib_unordered_map_try_emplace
167 #   error "__cpp_lib_unordered_map_try_emplace should be defined in c++17"
168 # endif
169 # if __cpp_lib_unordered_map_try_emplace != 201411L
170 #   error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++17"
171 # endif
172 
173 #elif TEST_STD_VER == 20
174 
175 # ifndef __cpp_lib_allocator_traits_is_always_equal
176 #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
177 # endif
178 # if __cpp_lib_allocator_traits_is_always_equal != 201411L
179 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
180 # endif
181 
182 # ifdef __cpp_lib_associative_heterogeneous_erasure
183 #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
184 # endif
185 
186 # ifdef __cpp_lib_associative_heterogeneous_insertion
187 #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
188 # endif
189 
190 # ifdef __cpp_lib_containers_ranges
191 #   error "__cpp_lib_containers_ranges should not be defined before c++23"
192 # endif
193 
194 # ifndef __cpp_lib_erase_if
195 #   error "__cpp_lib_erase_if should be defined in c++20"
196 # endif
197 # if __cpp_lib_erase_if != 202002L
198 #   error "__cpp_lib_erase_if should have the value 202002L in c++20"
199 # endif
200 
201 # ifndef __cpp_lib_generic_unordered_lookup
202 #   error "__cpp_lib_generic_unordered_lookup should be defined in c++20"
203 # endif
204 # if __cpp_lib_generic_unordered_lookup != 201811L
205 #   error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++20"
206 # endif
207 
208 # ifndef __cpp_lib_node_extract
209 #   error "__cpp_lib_node_extract should be defined in c++20"
210 # endif
211 # if __cpp_lib_node_extract != 201606L
212 #   error "__cpp_lib_node_extract should have the value 201606L in c++20"
213 # endif
214 
215 # ifndef __cpp_lib_nonmember_container_access
216 #   error "__cpp_lib_nonmember_container_access should be defined in c++20"
217 # endif
218 # if __cpp_lib_nonmember_container_access != 201411L
219 #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
220 # endif
221 
222 # ifdef __cpp_lib_tuple_like
223 #   error "__cpp_lib_tuple_like should not be defined before c++23"
224 # endif
225 
226 # ifndef __cpp_lib_unordered_map_try_emplace
227 #   error "__cpp_lib_unordered_map_try_emplace should be defined in c++20"
228 # endif
229 # if __cpp_lib_unordered_map_try_emplace != 201411L
230 #   error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++20"
231 # endif
232 
233 #elif TEST_STD_VER == 23
234 
235 # ifndef __cpp_lib_allocator_traits_is_always_equal
236 #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
237 # endif
238 # if __cpp_lib_allocator_traits_is_always_equal != 201411L
239 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
240 # endif
241 
242 # if !defined(_LIBCPP_VERSION)
243 #   ifndef __cpp_lib_associative_heterogeneous_erasure
244 #     error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++23"
245 #   endif
246 #   if __cpp_lib_associative_heterogeneous_erasure != 202110L
247 #     error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++23"
248 #   endif
249 # else // _LIBCPP_VERSION
250 #   ifdef __cpp_lib_associative_heterogeneous_erasure
251 #     error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
252 #   endif
253 # endif
254 
255 # ifdef __cpp_lib_associative_heterogeneous_insertion
256 #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
257 # endif
258 
259 # ifndef __cpp_lib_containers_ranges
260 #   error "__cpp_lib_containers_ranges should be defined in c++23"
261 # endif
262 # if __cpp_lib_containers_ranges != 202202L
263 #   error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
264 # endif
265 
266 # ifndef __cpp_lib_erase_if
267 #   error "__cpp_lib_erase_if should be defined in c++23"
268 # endif
269 # if __cpp_lib_erase_if != 202002L
270 #   error "__cpp_lib_erase_if should have the value 202002L in c++23"
271 # endif
272 
273 # ifndef __cpp_lib_generic_unordered_lookup
274 #   error "__cpp_lib_generic_unordered_lookup should be defined in c++23"
275 # endif
276 # if __cpp_lib_generic_unordered_lookup != 201811L
277 #   error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++23"
278 # endif
279 
280 # ifndef __cpp_lib_node_extract
281 #   error "__cpp_lib_node_extract should be defined in c++23"
282 # endif
283 # if __cpp_lib_node_extract != 201606L
284 #   error "__cpp_lib_node_extract should have the value 201606L in c++23"
285 # endif
286 
287 # ifndef __cpp_lib_nonmember_container_access
288 #   error "__cpp_lib_nonmember_container_access should be defined in c++23"
289 # endif
290 # if __cpp_lib_nonmember_container_access != 201411L
291 #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
292 # endif
293 
294 # if !defined(_LIBCPP_VERSION)
295 #   ifndef __cpp_lib_tuple_like
296 #     error "__cpp_lib_tuple_like should be defined in c++23"
297 #   endif
298 #   if __cpp_lib_tuple_like != 202207L
299 #     error "__cpp_lib_tuple_like should have the value 202207L in c++23"
300 #   endif
301 # else // _LIBCPP_VERSION
302 #   ifdef __cpp_lib_tuple_like
303 #     error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
304 #   endif
305 # endif
306 
307 # ifndef __cpp_lib_unordered_map_try_emplace
308 #   error "__cpp_lib_unordered_map_try_emplace should be defined in c++23"
309 # endif
310 # if __cpp_lib_unordered_map_try_emplace != 201411L
311 #   error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++23"
312 # endif
313 
314 #elif TEST_STD_VER > 23
315 
316 # ifndef __cpp_lib_allocator_traits_is_always_equal
317 #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
318 # endif
319 # if __cpp_lib_allocator_traits_is_always_equal != 201411L
320 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
321 # endif
322 
323 # if !defined(_LIBCPP_VERSION)
324 #   ifndef __cpp_lib_associative_heterogeneous_erasure
325 #     error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++26"
326 #   endif
327 #   if __cpp_lib_associative_heterogeneous_erasure != 202110L
328 #     error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++26"
329 #   endif
330 # else // _LIBCPP_VERSION
331 #   ifdef __cpp_lib_associative_heterogeneous_erasure
332 #     error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
333 #   endif
334 # endif
335 
336 # if !defined(_LIBCPP_VERSION)
337 #   ifndef __cpp_lib_associative_heterogeneous_insertion
338 #     error "__cpp_lib_associative_heterogeneous_insertion should be defined in c++26"
339 #   endif
340 #   if __cpp_lib_associative_heterogeneous_insertion != 202306L
341 #     error "__cpp_lib_associative_heterogeneous_insertion should have the value 202306L in c++26"
342 #   endif
343 # else // _LIBCPP_VERSION
344 #   ifdef __cpp_lib_associative_heterogeneous_insertion
345 #     error "__cpp_lib_associative_heterogeneous_insertion should not be defined because it is unimplemented in libc++!"
346 #   endif
347 # endif
348 
349 # ifndef __cpp_lib_containers_ranges
350 #   error "__cpp_lib_containers_ranges should be defined in c++26"
351 # endif
352 # if __cpp_lib_containers_ranges != 202202L
353 #   error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
354 # endif
355 
356 # ifndef __cpp_lib_erase_if
357 #   error "__cpp_lib_erase_if should be defined in c++26"
358 # endif
359 # if __cpp_lib_erase_if != 202002L
360 #   error "__cpp_lib_erase_if should have the value 202002L in c++26"
361 # endif
362 
363 # ifndef __cpp_lib_generic_unordered_lookup
364 #   error "__cpp_lib_generic_unordered_lookup should be defined in c++26"
365 # endif
366 # if __cpp_lib_generic_unordered_lookup != 201811L
367 #   error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++26"
368 # endif
369 
370 # ifndef __cpp_lib_node_extract
371 #   error "__cpp_lib_node_extract should be defined in c++26"
372 # endif
373 # if __cpp_lib_node_extract != 201606L
374 #   error "__cpp_lib_node_extract should have the value 201606L in c++26"
375 # endif
376 
377 # ifndef __cpp_lib_nonmember_container_access
378 #   error "__cpp_lib_nonmember_container_access should be defined in c++26"
379 # endif
380 # if __cpp_lib_nonmember_container_access != 201411L
381 #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
382 # endif
383 
384 # if !defined(_LIBCPP_VERSION)
385 #   ifndef __cpp_lib_tuple_like
386 #     error "__cpp_lib_tuple_like should be defined in c++26"
387 #   endif
388 #   if __cpp_lib_tuple_like != 202311L
389 #     error "__cpp_lib_tuple_like should have the value 202311L in c++26"
390 #   endif
391 # else // _LIBCPP_VERSION
392 #   ifdef __cpp_lib_tuple_like
393 #     error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
394 #   endif
395 # endif
396 
397 # ifndef __cpp_lib_unordered_map_try_emplace
398 #   error "__cpp_lib_unordered_map_try_emplace should be defined in c++26"
399 # endif
400 # if __cpp_lib_unordered_map_try_emplace != 201411L
401 #   error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++26"
402 # endif
403 
404 #endif // TEST_STD_VER > 23
405 
406