From 7dc7e8e303cf7e5667ceead8fb4320db5f37bf72 Mon Sep 17 00:00:00 2001 From: "A. Jiang" Date: Thu, 27 Mar 2025 17:09:41 +0800 Subject: [PATCH 1/2] Adjust inheritance detection for `enable_view` --- stl/inc/optional | 5 +- stl/inc/xutility | 22 +-- .../P0896R4_ranges_range_machinery/test.cpp | 143 ++++++++++++++++++ 3 files changed, 155 insertions(+), 15 deletions(-) diff --git a/stl/inc/optional b/stl/inc/optional index 14cf3f65127..621d02ff748 100644 --- a/stl/inc/optional +++ b/stl/inc/optional @@ -952,8 +952,11 @@ _NODISCARD constexpr bool operator>=(const _Ty1& _Left, const optional<_Ty2>& _R } #if _HAS_CXX20 +template +concept _Derived_from_optional = requires(const _Ty& _Obj) { [](const optional<_Uty>&) {}(_Obj); }; + _EXPORT_STD template - requires (!_Derived_from_specialization_of<_Ty2, optional>) && three_way_comparable_with<_Ty1, _Ty2> + requires (!_Derived_from_optional<_Ty2>) && three_way_comparable_with<_Ty1, _Ty2> _NODISCARD constexpr compare_three_way_result_t<_Ty1, _Ty2> operator<=>(const optional<_Ty1>& _Left, const _Ty2& _Right) noexcept(noexcept(*_Left <=> _Right)) /* strengthened */ { if (_Left) { diff --git a/stl/inc/xutility b/stl/inc/xutility index fbce0c9df7c..cd756384c6b 100644 --- a/stl/inc/xutility +++ b/stl/inc/xutility @@ -824,14 +824,6 @@ using _Algorithm_int_t = conditional_t, _Ty, ptrdiff_t>; template concept _Destructible_object = is_object_v<_Ty> && destructible<_Ty>; -template