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