From 945ce1aa3d29e24c49720ae9e0bcfbac88f2defd Mon Sep 17 00:00:00 2001 From: Hristo Hristov Date: Fri, 20 Jun 2025 19:36:46 +0300 Subject: [PATCH] [libc++] Update the value of __cpp_lib_constrained_equality after P3379R0 (#144553) https://wg21.link/P3379R0 updated the value of __cpp_lib_constrained_equality, but we forgot to update it when we implemented the paper. --- libcxx/include/version | 6 ++-- .../expected.version.compile.pass.cpp | 33 +++++++++++++++++++ .../optional.version.compile.pass.cpp | 4 +-- .../tuple.version.compile.pass.cpp | 4 +-- .../utility.version.compile.pass.cpp | 4 +-- .../variant.version.compile.pass.cpp | 4 +-- .../version.version.compile.pass.cpp | 4 +-- .../generate_feature_test_macro_components.py | 7 ++-- 8 files changed, 51 insertions(+), 15 deletions(-) diff --git a/libcxx/include/version b/libcxx/include/version index 7154cab92335..f430c7edff2b 100644 --- a/libcxx/include/version +++ b/libcxx/include/version @@ -83,8 +83,8 @@ __cpp_lib_constexpr_tuple 201811L __cpp_lib_constexpr_typeinfo 202106L __cpp_lib_constexpr_utility 201811L __cpp_lib_constexpr_vector 201907L -__cpp_lib_constrained_equality 202403L - +__cpp_lib_constrained_equality 202411L + __cpp_lib_containers_ranges 202202L @@ -551,7 +551,7 @@ __cpp_lib_void_t 201411L # define __cpp_lib_constexpr_new 202406L # endif # define __cpp_lib_constexpr_queue 202502L -// # define __cpp_lib_constrained_equality 202403L +// # define __cpp_lib_constrained_equality 202411L // # define __cpp_lib_copyable_function 202306L // # define __cpp_lib_debugging 202311L // # define __cpp_lib_default_template_type_for_algorithm_values 202403L diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/expected.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/expected.version.compile.pass.cpp index d58f726f66e2..9c7a84f145dd 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/expected.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/expected.version.compile.pass.cpp @@ -20,6 +20,10 @@ #if TEST_STD_VER < 14 +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined before c++26" +# endif + # ifdef __cpp_lib_expected # error "__cpp_lib_expected should not be defined before c++23" # endif @@ -30,6 +34,10 @@ #elif TEST_STD_VER == 14 +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined before c++26" +# endif + # ifdef __cpp_lib_expected # error "__cpp_lib_expected should not be defined before c++23" # endif @@ -40,6 +48,10 @@ #elif TEST_STD_VER == 17 +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined before c++26" +# endif + # ifdef __cpp_lib_expected # error "__cpp_lib_expected should not be defined before c++23" # endif @@ -50,6 +62,10 @@ #elif TEST_STD_VER == 20 +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined before c++26" +# endif + # ifdef __cpp_lib_expected # error "__cpp_lib_expected should not be defined before c++23" # endif @@ -60,6 +76,10 @@ #elif TEST_STD_VER == 23 +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined before c++26" +# endif + # ifndef __cpp_lib_expected # error "__cpp_lib_expected should be defined in c++23" # endif @@ -73,6 +93,19 @@ #elif TEST_STD_VER > 23 +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should be defined in c++26" +# endif +# if __cpp_lib_constrained_equality != 202411L +# error "__cpp_lib_constrained_equality should have the value 202411L in c++26" +# endif +# else +# ifdef __cpp_lib_constrained_equality +# error "__cpp_lib_constrained_equality should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_expected # error "__cpp_lib_expected should be defined in c++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/optional.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/optional.version.compile.pass.cpp index f8ff69f61877..32685972d601 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/optional.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/optional.version.compile.pass.cpp @@ -123,8 +123,8 @@ # ifndef __cpp_lib_constrained_equality # error "__cpp_lib_constrained_equality should be defined in c++26" # endif -# if __cpp_lib_constrained_equality != 202403L -# error "__cpp_lib_constrained_equality should have the value 202403L in c++26" +# if __cpp_lib_constrained_equality != 202411L +# error "__cpp_lib_constrained_equality should have the value 202411L in c++26" # endif # else # ifdef __cpp_lib_constrained_equality diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.compile.pass.cpp index f4a2fd8b29f4..b583edfc43ad 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.compile.pass.cpp @@ -274,8 +274,8 @@ # ifndef __cpp_lib_constrained_equality # error "__cpp_lib_constrained_equality should be defined in c++26" # endif -# if __cpp_lib_constrained_equality != 202403L -# error "__cpp_lib_constrained_equality should have the value 202403L in c++26" +# if __cpp_lib_constrained_equality != 202411L +# error "__cpp_lib_constrained_equality should have the value 202411L in c++26" # endif # else # ifdef __cpp_lib_constrained_equality diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.compile.pass.cpp index e0a83c7813b2..7dd347857633 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.compile.pass.cpp @@ -405,8 +405,8 @@ # ifndef __cpp_lib_constrained_equality # error "__cpp_lib_constrained_equality should be defined in c++26" # endif -# if __cpp_lib_constrained_equality != 202403L -# error "__cpp_lib_constrained_equality should have the value 202403L in c++26" +# if __cpp_lib_constrained_equality != 202411L +# error "__cpp_lib_constrained_equality should have the value 202411L in c++26" # endif # else # ifdef __cpp_lib_constrained_equality diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/variant.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/variant.version.compile.pass.cpp index dc4af4d09f9e..4a7b9f7431a8 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/variant.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/variant.version.compile.pass.cpp @@ -103,8 +103,8 @@ # ifndef __cpp_lib_constrained_equality # error "__cpp_lib_constrained_equality should be defined in c++26" # endif -# if __cpp_lib_constrained_equality != 202403L -# error "__cpp_lib_constrained_equality should have the value 202403L in c++26" +# if __cpp_lib_constrained_equality != 202411L +# error "__cpp_lib_constrained_equality should have the value 202411L in c++26" # endif # else # ifdef __cpp_lib_constrained_equality diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp index e4fe9f994e2e..cef334f70c07 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp @@ -6575,8 +6575,8 @@ # ifndef __cpp_lib_constrained_equality # error "__cpp_lib_constrained_equality should be defined in c++26" # endif -# if __cpp_lib_constrained_equality != 202403L -# error "__cpp_lib_constrained_equality should have the value 202403L in c++26" +# if __cpp_lib_constrained_equality != 202411L +# error "__cpp_lib_constrained_equality should have the value 202411L in c++26" # endif # else # ifdef __cpp_lib_constrained_equality diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py index de06b9dd1bee..849a96b9585b 100644 --- a/libcxx/utils/generate_feature_test_macro_components.py +++ b/libcxx/utils/generate_feature_test_macro_components.py @@ -431,8 +431,11 @@ feature_test_macros = [ }, { "name": "__cpp_lib_constrained_equality", - "values": {"c++26": 202403}, # P2944R3: Comparisons for reference_wrapper - "headers": ["optional", "tuple", "utility", "variant"], + "values": { + # "c++26": 202403, # P2944R3: Comparisons for reference_wrapper + "c++26": 202411, # P3379R0: Constrain std::expected equality operators + }, + "headers": ["expected", "optional", "tuple", "utility", "variant"], "unimplemented": True, }, {