12c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
22c6217f2SLouis Dionne //
32c6217f2SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42c6217f2SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
52c6217f2SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62c6217f2SLouis Dionne //
72c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
82c6217f2SLouis Dionne //
92c6217f2SLouis Dionne // WARNING: This test was generated by generate_feature_test_macro_components.py
102c6217f2SLouis Dionne // and should not be edited manually.
112c6217f2SLouis Dionne //
122c6217f2SLouis Dionne // clang-format off
132c6217f2SLouis Dionne 
142c6217f2SLouis Dionne // <map>
152c6217f2SLouis Dionne 
162c6217f2SLouis Dionne // Test the feature test macros defined by <map>
172c6217f2SLouis Dionne 
182c6217f2SLouis Dionne /*  Constant                                         Value
192c6217f2SLouis Dionne     __cpp_lib_allocator_traits_is_always_equal       201411L [C++17]
2071400505SMark de Wever     __cpp_lib_associative_heterogeneous_erasure      202110L [C++23]
213f05d044SMark de Wever     __cpp_lib_associative_heterogeneous_insertion    202306L [C++26]
22*028f1b07Skrzysdz     __cpp_lib_containers_ranges                      202202L [C++23]
232c6217f2SLouis Dionne     __cpp_lib_erase_if                               202002L [C++20]
242c6217f2SLouis Dionne     __cpp_lib_generic_associative_lookup             201304L [C++14]
252c6217f2SLouis Dionne     __cpp_lib_map_try_emplace                        201411L [C++17]
262c6217f2SLouis Dionne     __cpp_lib_node_extract                           201606L [C++17]
272c6217f2SLouis Dionne     __cpp_lib_nonmember_container_access             201411L [C++17]
28f49ccca8SMark de Wever     __cpp_lib_tuple_like                             202207L [C++23]
29f49ccca8SMark de Wever                                                      202311L [C++26]
302c6217f2SLouis Dionne */
312c6217f2SLouis Dionne 
322c6217f2SLouis Dionne #include <map>
332c6217f2SLouis Dionne #include "test_macros.h"
342c6217f2SLouis Dionne 
352c6217f2SLouis Dionne #if TEST_STD_VER < 14
362c6217f2SLouis Dionne 
372c6217f2SLouis Dionne # ifdef __cpp_lib_allocator_traits_is_always_equal
382c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
392c6217f2SLouis Dionne # endif
402c6217f2SLouis Dionne 
412c6217f2SLouis Dionne # ifdef __cpp_lib_associative_heterogeneous_erasure
4271400505SMark de Wever #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
432c6217f2SLouis Dionne # endif
442c6217f2SLouis Dionne 
453f05d044SMark de Wever # ifdef __cpp_lib_associative_heterogeneous_insertion
463f05d044SMark de Wever #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
473f05d044SMark de Wever # endif
483f05d044SMark de Wever 
49*028f1b07Skrzysdz # ifdef __cpp_lib_containers_ranges
50*028f1b07Skrzysdz #   error "__cpp_lib_containers_ranges should not be defined before c++23"
51*028f1b07Skrzysdz # endif
52*028f1b07Skrzysdz 
532c6217f2SLouis Dionne # ifdef __cpp_lib_erase_if
542c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should not be defined before c++20"
552c6217f2SLouis Dionne # endif
562c6217f2SLouis Dionne 
572c6217f2SLouis Dionne # ifdef __cpp_lib_generic_associative_lookup
582c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should not be defined before c++14"
592c6217f2SLouis Dionne # endif
602c6217f2SLouis Dionne 
612c6217f2SLouis Dionne # ifdef __cpp_lib_map_try_emplace
622c6217f2SLouis Dionne #   error "__cpp_lib_map_try_emplace should not be defined before c++17"
632c6217f2SLouis Dionne # endif
642c6217f2SLouis Dionne 
652c6217f2SLouis Dionne # ifdef __cpp_lib_node_extract
662c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should not be defined before c++17"
672c6217f2SLouis Dionne # endif
682c6217f2SLouis Dionne 
692c6217f2SLouis Dionne # ifdef __cpp_lib_nonmember_container_access
702c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should not be defined before c++17"
712c6217f2SLouis Dionne # endif
722c6217f2SLouis Dionne 
73f49ccca8SMark de Wever # ifdef __cpp_lib_tuple_like
74f49ccca8SMark de Wever #   error "__cpp_lib_tuple_like should not be defined before c++23"
75f49ccca8SMark de Wever # endif
76f49ccca8SMark de Wever 
772c6217f2SLouis Dionne #elif TEST_STD_VER == 14
782c6217f2SLouis Dionne 
792c6217f2SLouis Dionne # ifdef __cpp_lib_allocator_traits_is_always_equal
802c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
812c6217f2SLouis Dionne # endif
822c6217f2SLouis Dionne 
832c6217f2SLouis Dionne # ifdef __cpp_lib_associative_heterogeneous_erasure
8471400505SMark de Wever #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
852c6217f2SLouis Dionne # endif
862c6217f2SLouis Dionne 
873f05d044SMark de Wever # ifdef __cpp_lib_associative_heterogeneous_insertion
883f05d044SMark de Wever #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
893f05d044SMark de Wever # endif
903f05d044SMark de Wever 
91*028f1b07Skrzysdz # ifdef __cpp_lib_containers_ranges
92*028f1b07Skrzysdz #   error "__cpp_lib_containers_ranges should not be defined before c++23"
93*028f1b07Skrzysdz # endif
94*028f1b07Skrzysdz 
952c6217f2SLouis Dionne # ifdef __cpp_lib_erase_if
962c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should not be defined before c++20"
972c6217f2SLouis Dionne # endif
982c6217f2SLouis Dionne 
992c6217f2SLouis Dionne # ifndef __cpp_lib_generic_associative_lookup
1002c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should be defined in c++14"
1012c6217f2SLouis Dionne # endif
1022c6217f2SLouis Dionne # if __cpp_lib_generic_associative_lookup != 201304L
1032c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++14"
1042c6217f2SLouis Dionne # endif
1052c6217f2SLouis Dionne 
1062c6217f2SLouis Dionne # ifdef __cpp_lib_map_try_emplace
1072c6217f2SLouis Dionne #   error "__cpp_lib_map_try_emplace should not be defined before c++17"
1082c6217f2SLouis Dionne # endif
1092c6217f2SLouis Dionne 
1102c6217f2SLouis Dionne # ifdef __cpp_lib_node_extract
1112c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should not be defined before c++17"
1122c6217f2SLouis Dionne # endif
1132c6217f2SLouis Dionne 
1142c6217f2SLouis Dionne # ifdef __cpp_lib_nonmember_container_access
1152c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should not be defined before c++17"
1162c6217f2SLouis Dionne # endif
1172c6217f2SLouis Dionne 
118f49ccca8SMark de Wever # ifdef __cpp_lib_tuple_like
119f49ccca8SMark de Wever #   error "__cpp_lib_tuple_like should not be defined before c++23"
120f49ccca8SMark de Wever # endif
121f49ccca8SMark de Wever 
1222c6217f2SLouis Dionne #elif TEST_STD_VER == 17
1232c6217f2SLouis Dionne 
1242c6217f2SLouis Dionne # ifndef __cpp_lib_allocator_traits_is_always_equal
1252c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
1262c6217f2SLouis Dionne # endif
1272c6217f2SLouis Dionne # if __cpp_lib_allocator_traits_is_always_equal != 201411L
1282c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
1292c6217f2SLouis Dionne # endif
1302c6217f2SLouis Dionne 
1312c6217f2SLouis Dionne # ifdef __cpp_lib_associative_heterogeneous_erasure
13271400505SMark de Wever #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
1332c6217f2SLouis Dionne # endif
1342c6217f2SLouis Dionne 
1353f05d044SMark de Wever # ifdef __cpp_lib_associative_heterogeneous_insertion
1363f05d044SMark de Wever #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
1373f05d044SMark de Wever # endif
1383f05d044SMark de Wever 
139*028f1b07Skrzysdz # ifdef __cpp_lib_containers_ranges
140*028f1b07Skrzysdz #   error "__cpp_lib_containers_ranges should not be defined before c++23"
141*028f1b07Skrzysdz # endif
142*028f1b07Skrzysdz 
1432c6217f2SLouis Dionne # ifdef __cpp_lib_erase_if
1442c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should not be defined before c++20"
1452c6217f2SLouis Dionne # endif
1462c6217f2SLouis Dionne 
1472c6217f2SLouis Dionne # ifndef __cpp_lib_generic_associative_lookup
1482c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should be defined in c++17"
1492c6217f2SLouis Dionne # endif
1502c6217f2SLouis Dionne # if __cpp_lib_generic_associative_lookup != 201304L
1512c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++17"
1522c6217f2SLouis Dionne # endif
1532c6217f2SLouis Dionne 
1542c6217f2SLouis Dionne # ifndef __cpp_lib_map_try_emplace
1552c6217f2SLouis Dionne #   error "__cpp_lib_map_try_emplace should be defined in c++17"
1562c6217f2SLouis Dionne # endif
1572c6217f2SLouis Dionne # if __cpp_lib_map_try_emplace != 201411L
1582c6217f2SLouis Dionne #   error "__cpp_lib_map_try_emplace should have the value 201411L in c++17"
1592c6217f2SLouis Dionne # endif
1602c6217f2SLouis Dionne 
1612c6217f2SLouis Dionne # ifndef __cpp_lib_node_extract
1622c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should be defined in c++17"
1632c6217f2SLouis Dionne # endif
1642c6217f2SLouis Dionne # if __cpp_lib_node_extract != 201606L
1652c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should have the value 201606L in c++17"
1662c6217f2SLouis Dionne # endif
1672c6217f2SLouis Dionne 
1682c6217f2SLouis Dionne # ifndef __cpp_lib_nonmember_container_access
1692c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should be defined in c++17"
1702c6217f2SLouis Dionne # endif
1712c6217f2SLouis Dionne # if __cpp_lib_nonmember_container_access != 201411L
1722c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
1732c6217f2SLouis Dionne # endif
1742c6217f2SLouis Dionne 
175f49ccca8SMark de Wever # ifdef __cpp_lib_tuple_like
176f49ccca8SMark de Wever #   error "__cpp_lib_tuple_like should not be defined before c++23"
177f49ccca8SMark de Wever # endif
178f49ccca8SMark de Wever 
1792c6217f2SLouis Dionne #elif TEST_STD_VER == 20
1802c6217f2SLouis Dionne 
1812c6217f2SLouis Dionne # ifndef __cpp_lib_allocator_traits_is_always_equal
1822c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
1832c6217f2SLouis Dionne # endif
1842c6217f2SLouis Dionne # if __cpp_lib_allocator_traits_is_always_equal != 201411L
1852c6217f2SLouis Dionne #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
1862c6217f2SLouis Dionne # endif
1872c6217f2SLouis Dionne 
1882c6217f2SLouis Dionne # ifdef __cpp_lib_associative_heterogeneous_erasure
18971400505SMark de Wever #   error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
1902c6217f2SLouis Dionne # endif
1912c6217f2SLouis Dionne 
1923f05d044SMark de Wever # ifdef __cpp_lib_associative_heterogeneous_insertion
1933f05d044SMark de Wever #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
1943f05d044SMark de Wever # endif
1953f05d044SMark de Wever 
196*028f1b07Skrzysdz # ifdef __cpp_lib_containers_ranges
197*028f1b07Skrzysdz #   error "__cpp_lib_containers_ranges should not be defined before c++23"
198*028f1b07Skrzysdz # endif
199*028f1b07Skrzysdz 
2002c6217f2SLouis Dionne # ifndef __cpp_lib_erase_if
2012c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should be defined in c++20"
2022c6217f2SLouis Dionne # endif
2032c6217f2SLouis Dionne # if __cpp_lib_erase_if != 202002L
2042c6217f2SLouis Dionne #   error "__cpp_lib_erase_if should have the value 202002L in c++20"
2052c6217f2SLouis Dionne # endif
2062c6217f2SLouis Dionne 
2072c6217f2SLouis Dionne # ifndef __cpp_lib_generic_associative_lookup
2082c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should be defined in c++20"
2092c6217f2SLouis Dionne # endif
2102c6217f2SLouis Dionne # if __cpp_lib_generic_associative_lookup != 201304L
2112c6217f2SLouis Dionne #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++20"
2122c6217f2SLouis Dionne # endif
2132c6217f2SLouis Dionne 
2142c6217f2SLouis Dionne # ifndef __cpp_lib_map_try_emplace
2152c6217f2SLouis Dionne #   error "__cpp_lib_map_try_emplace should be defined in c++20"
2162c6217f2SLouis Dionne # endif
2172c6217f2SLouis Dionne # if __cpp_lib_map_try_emplace != 201411L
2182c6217f2SLouis Dionne #   error "__cpp_lib_map_try_emplace should have the value 201411L in c++20"
2192c6217f2SLouis Dionne # endif
2202c6217f2SLouis Dionne 
2212c6217f2SLouis Dionne # ifndef __cpp_lib_node_extract
2222c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should be defined in c++20"
2232c6217f2SLouis Dionne # endif
2242c6217f2SLouis Dionne # if __cpp_lib_node_extract != 201606L
2252c6217f2SLouis Dionne #   error "__cpp_lib_node_extract should have the value 201606L in c++20"
2262c6217f2SLouis Dionne # endif
2272c6217f2SLouis Dionne 
2282c6217f2SLouis Dionne # ifndef __cpp_lib_nonmember_container_access
2292c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should be defined in c++20"
2302c6217f2SLouis Dionne # endif
2312c6217f2SLouis Dionne # if __cpp_lib_nonmember_container_access != 201411L
2322c6217f2SLouis Dionne #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
2332c6217f2SLouis Dionne # endif
2342c6217f2SLouis Dionne 
235f49ccca8SMark de Wever # ifdef __cpp_lib_tuple_like
236f49ccca8SMark de Wever #   error "__cpp_lib_tuple_like should not be defined before c++23"
237f49ccca8SMark de Wever # endif
238f49ccca8SMark de Wever 
23900c97cbcSMark de Wever #elif TEST_STD_VER == 23
2402c6217f2SLouis Dionne 
2412c6217f2SLouis Dionne # ifndef __cpp_lib_allocator_traits_is_always_equal
24271400505SMark de Wever #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
2432c6217f2SLouis Dionne # endif
2442c6217f2SLouis Dionne # if __cpp_lib_allocator_traits_is_always_equal != 201411L
24571400505SMark de Wever #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
2462c6217f2SLouis Dionne # endif
2472c6217f2SLouis Dionne 
2482c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
2492c6217f2SLouis Dionne #   ifndef __cpp_lib_associative_heterogeneous_erasure
25071400505SMark de Wever #     error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++23"
2512c6217f2SLouis Dionne #   endif
2522c6217f2SLouis Dionne #   if __cpp_lib_associative_heterogeneous_erasure != 202110L
25371400505SMark de Wever #     error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++23"
2542c6217f2SLouis Dionne #   endif
2552c6217f2SLouis Dionne # else // _LIBCPP_VERSION
2562c6217f2SLouis Dionne #   ifdef __cpp_lib_associative_heterogeneous_erasure
2572c6217f2SLouis Dionne #     error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
2582c6217f2SLouis Dionne #   endif
2592c6217f2SLouis Dionne # endif
2602c6217f2SLouis Dionne 
2613f05d044SMark de Wever # ifdef __cpp_lib_associative_heterogeneous_insertion
2623f05d044SMark de Wever #   error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
2633f05d044SMark de Wever # endif
2643f05d044SMark de Wever 
265*028f1b07Skrzysdz # ifndef __cpp_lib_containers_ranges
266*028f1b07Skrzysdz #   error "__cpp_lib_containers_ranges should be defined in c++23"
267*028f1b07Skrzysdz # endif
268*028f1b07Skrzysdz # if __cpp_lib_containers_ranges != 202202L
269*028f1b07Skrzysdz #   error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
270*028f1b07Skrzysdz # endif
271*028f1b07Skrzysdz 
2722c6217f2SLouis Dionne # ifndef __cpp_lib_erase_if
27371400505SMark de Wever #   error "__cpp_lib_erase_if should be defined in c++23"
2742c6217f2SLouis Dionne # endif
2752c6217f2SLouis Dionne # if __cpp_lib_erase_if != 202002L
27671400505SMark de Wever #   error "__cpp_lib_erase_if should have the value 202002L in c++23"
2772c6217f2SLouis Dionne # endif
2782c6217f2SLouis Dionne 
2792c6217f2SLouis Dionne # ifndef __cpp_lib_generic_associative_lookup
28071400505SMark de Wever #   error "__cpp_lib_generic_associative_lookup should be defined in c++23"
2812c6217f2SLouis Dionne # endif
2822c6217f2SLouis Dionne # if __cpp_lib_generic_associative_lookup != 201304L
28371400505SMark de Wever #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++23"
2842c6217f2SLouis Dionne # endif
2852c6217f2SLouis Dionne 
2862c6217f2SLouis Dionne # ifndef __cpp_lib_map_try_emplace
28771400505SMark de Wever #   error "__cpp_lib_map_try_emplace should be defined in c++23"
2882c6217f2SLouis Dionne # endif
2892c6217f2SLouis Dionne # if __cpp_lib_map_try_emplace != 201411L
29071400505SMark de Wever #   error "__cpp_lib_map_try_emplace should have the value 201411L in c++23"
2912c6217f2SLouis Dionne # endif
2922c6217f2SLouis Dionne 
2932c6217f2SLouis Dionne # ifndef __cpp_lib_node_extract
29471400505SMark de Wever #   error "__cpp_lib_node_extract should be defined in c++23"
2952c6217f2SLouis Dionne # endif
2962c6217f2SLouis Dionne # if __cpp_lib_node_extract != 201606L
29771400505SMark de Wever #   error "__cpp_lib_node_extract should have the value 201606L in c++23"
2982c6217f2SLouis Dionne # endif
2992c6217f2SLouis Dionne 
3002c6217f2SLouis Dionne # ifndef __cpp_lib_nonmember_container_access
30171400505SMark de Wever #   error "__cpp_lib_nonmember_container_access should be defined in c++23"
3022c6217f2SLouis Dionne # endif
3032c6217f2SLouis Dionne # if __cpp_lib_nonmember_container_access != 201411L
30471400505SMark de Wever #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
3052c6217f2SLouis Dionne # endif
3062c6217f2SLouis Dionne 
307f49ccca8SMark de Wever # if !defined(_LIBCPP_VERSION)
308f49ccca8SMark de Wever #   ifndef __cpp_lib_tuple_like
309f49ccca8SMark de Wever #     error "__cpp_lib_tuple_like should be defined in c++23"
310f49ccca8SMark de Wever #   endif
311f49ccca8SMark de Wever #   if __cpp_lib_tuple_like != 202207L
312f49ccca8SMark de Wever #     error "__cpp_lib_tuple_like should have the value 202207L in c++23"
313f49ccca8SMark de Wever #   endif
314f49ccca8SMark de Wever # else // _LIBCPP_VERSION
315f49ccca8SMark de Wever #   ifdef __cpp_lib_tuple_like
316f49ccca8SMark de Wever #     error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
317f49ccca8SMark de Wever #   endif
318f49ccca8SMark de Wever # endif
319f49ccca8SMark de Wever 
32000c97cbcSMark de Wever #elif TEST_STD_VER > 23
32100c97cbcSMark de Wever 
32200c97cbcSMark de Wever # ifndef __cpp_lib_allocator_traits_is_always_equal
32300c97cbcSMark de Wever #   error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
32400c97cbcSMark de Wever # endif
32500c97cbcSMark de Wever # if __cpp_lib_allocator_traits_is_always_equal != 201411L
32600c97cbcSMark de Wever #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
32700c97cbcSMark de Wever # endif
32800c97cbcSMark de Wever 
32900c97cbcSMark de Wever # if !defined(_LIBCPP_VERSION)
33000c97cbcSMark de Wever #   ifndef __cpp_lib_associative_heterogeneous_erasure
33100c97cbcSMark de Wever #     error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++26"
33200c97cbcSMark de Wever #   endif
33300c97cbcSMark de Wever #   if __cpp_lib_associative_heterogeneous_erasure != 202110L
33400c97cbcSMark de Wever #     error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++26"
33500c97cbcSMark de Wever #   endif
33600c97cbcSMark de Wever # else // _LIBCPP_VERSION
33700c97cbcSMark de Wever #   ifdef __cpp_lib_associative_heterogeneous_erasure
33800c97cbcSMark de Wever #     error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
33900c97cbcSMark de Wever #   endif
34000c97cbcSMark de Wever # endif
34100c97cbcSMark de Wever 
3423f05d044SMark de Wever # if !defined(_LIBCPP_VERSION)
3433f05d044SMark de Wever #   ifndef __cpp_lib_associative_heterogeneous_insertion
3443f05d044SMark de Wever #     error "__cpp_lib_associative_heterogeneous_insertion should be defined in c++26"
3453f05d044SMark de Wever #   endif
3463f05d044SMark de Wever #   if __cpp_lib_associative_heterogeneous_insertion != 202306L
3473f05d044SMark de Wever #     error "__cpp_lib_associative_heterogeneous_insertion should have the value 202306L in c++26"
3483f05d044SMark de Wever #   endif
3493f05d044SMark de Wever # else // _LIBCPP_VERSION
3503f05d044SMark de Wever #   ifdef __cpp_lib_associative_heterogeneous_insertion
3513f05d044SMark de Wever #     error "__cpp_lib_associative_heterogeneous_insertion should not be defined because it is unimplemented in libc++!"
3523f05d044SMark de Wever #   endif
3533f05d044SMark de Wever # endif
3543f05d044SMark de Wever 
355*028f1b07Skrzysdz # ifndef __cpp_lib_containers_ranges
356*028f1b07Skrzysdz #   error "__cpp_lib_containers_ranges should be defined in c++26"
357*028f1b07Skrzysdz # endif
358*028f1b07Skrzysdz # if __cpp_lib_containers_ranges != 202202L
359*028f1b07Skrzysdz #   error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
360*028f1b07Skrzysdz # endif
361*028f1b07Skrzysdz 
36200c97cbcSMark de Wever # ifndef __cpp_lib_erase_if
36300c97cbcSMark de Wever #   error "__cpp_lib_erase_if should be defined in c++26"
36400c97cbcSMark de Wever # endif
36500c97cbcSMark de Wever # if __cpp_lib_erase_if != 202002L
36600c97cbcSMark de Wever #   error "__cpp_lib_erase_if should have the value 202002L in c++26"
36700c97cbcSMark de Wever # endif
36800c97cbcSMark de Wever 
36900c97cbcSMark de Wever # ifndef __cpp_lib_generic_associative_lookup
37000c97cbcSMark de Wever #   error "__cpp_lib_generic_associative_lookup should be defined in c++26"
37100c97cbcSMark de Wever # endif
37200c97cbcSMark de Wever # if __cpp_lib_generic_associative_lookup != 201304L
37300c97cbcSMark de Wever #   error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++26"
37400c97cbcSMark de Wever # endif
37500c97cbcSMark de Wever 
37600c97cbcSMark de Wever # ifndef __cpp_lib_map_try_emplace
37700c97cbcSMark de Wever #   error "__cpp_lib_map_try_emplace should be defined in c++26"
37800c97cbcSMark de Wever # endif
37900c97cbcSMark de Wever # if __cpp_lib_map_try_emplace != 201411L
38000c97cbcSMark de Wever #   error "__cpp_lib_map_try_emplace should have the value 201411L in c++26"
38100c97cbcSMark de Wever # endif
38200c97cbcSMark de Wever 
38300c97cbcSMark de Wever # ifndef __cpp_lib_node_extract
38400c97cbcSMark de Wever #   error "__cpp_lib_node_extract should be defined in c++26"
38500c97cbcSMark de Wever # endif
38600c97cbcSMark de Wever # if __cpp_lib_node_extract != 201606L
38700c97cbcSMark de Wever #   error "__cpp_lib_node_extract should have the value 201606L in c++26"
38800c97cbcSMark de Wever # endif
38900c97cbcSMark de Wever 
39000c97cbcSMark de Wever # ifndef __cpp_lib_nonmember_container_access
39100c97cbcSMark de Wever #   error "__cpp_lib_nonmember_container_access should be defined in c++26"
39200c97cbcSMark de Wever # endif
39300c97cbcSMark de Wever # if __cpp_lib_nonmember_container_access != 201411L
39400c97cbcSMark de Wever #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
39500c97cbcSMark de Wever # endif
39600c97cbcSMark de Wever 
397f49ccca8SMark de Wever # if !defined(_LIBCPP_VERSION)
398f49ccca8SMark de Wever #   ifndef __cpp_lib_tuple_like
399f49ccca8SMark de Wever #     error "__cpp_lib_tuple_like should be defined in c++26"
400f49ccca8SMark de Wever #   endif
401f49ccca8SMark de Wever #   if __cpp_lib_tuple_like != 202311L
402f49ccca8SMark de Wever #     error "__cpp_lib_tuple_like should have the value 202311L in c++26"
403f49ccca8SMark de Wever #   endif
404f49ccca8SMark de Wever # else // _LIBCPP_VERSION
405f49ccca8SMark de Wever #   ifdef __cpp_lib_tuple_like
406f49ccca8SMark de Wever #     error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
407f49ccca8SMark de Wever #   endif
408f49ccca8SMark de Wever # endif
409f49ccca8SMark de Wever 
41000c97cbcSMark de Wever #endif // TEST_STD_VER > 23
4112c6217f2SLouis Dionne 
412