diff --git a/libcxx/include/version b/libcxx/include/version index 87c4ede9a7e59..682f078b4fc8b 100644 --- a/libcxx/include/version +++ b/libcxx/include/version @@ -82,8 +82,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 @@ -549,7 +549,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 d58f726f66e2f..9c7a84f145dde 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 f8ff69f618777..32685972d6019 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 f4a2fd8b29f45..b583edfc43ad0 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 e0a83c7813b28..7dd3478576331 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 dc4af4d09f9e5..4a7b9f7431a81 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 a13edacd1e46a..8f4c24c1b4e67 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 @@ -6548,8 +6548,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 b59c7fdaf0a3d..c185f8b17f50d 100644 --- a/libcxx/utils/generate_feature_test_macro_components.py +++ b/libcxx/utils/generate_feature_test_macro_components.py @@ -426,8 +426,11 @@ def add_version_header(tc): }, { "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, }, {