From cb96522275a23d675ccae606a26dbfccfbebad0a Mon Sep 17 00:00:00 2001 From: Zach Laine Date: Wed, 3 May 2023 20:06:56 -0500 Subject: [PATCH] detail::sub -> detail::iter_sub; make iter_sub a bit more robust. --- .../stl_interfaces/iterator_interface.hpp | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/include/boost/stl_interfaces/iterator_interface.hpp b/include/boost/stl_interfaces/iterator_interface.hpp index 0c5aa30..2e8170e 100644 --- a/include/boost/stl_interfaces/iterator_interface.hpp +++ b/include/boost/stl_interfaces/iterator_interface.hpp @@ -639,10 +639,11 @@ namespace boost { namespace stl_interfaces { BOOST_STL_INTERFACES_NAMESPACE_V2 { requires (D1 d1, D2 d2) { access::base(d1) == access::base(d2); }; // clang-format on - template + template // clang-format off - concept sub = requires (D d) { - {d - d} -> std::convertible_to; + concept iter_sub = requires (D d) { + typename D::difference_type; + {d - d} -> std::convertible_to; }; // clang-format on @@ -826,7 +827,7 @@ namespace boost { namespace stl_interfaces { BOOST_STL_INTERFACES_NAMESPACE_V2 { #if defined(__cpp_lib_three_way_comparison) friend constexpr auto operator<=>(D lhs, D rhs) - requires v2_dtl::base_3way || v2_dtl::sub { + requires v2_dtl::base_3way || v2_dtl::iter_sub { if constexpr (v2_dtl::base_3way) { return access::base(lhs) <=> access::base(rhs); } else { @@ -838,19 +839,19 @@ namespace boost { namespace stl_interfaces { BOOST_STL_INTERFACES_NAMESPACE_V2 { } #endif friend constexpr bool operator<(D lhs, D rhs) - requires v2_dtl::sub { + requires v2_dtl::iter_sub { return (lhs - rhs) < difference_type(0); } friend constexpr bool operator<=(D lhs, D rhs) - requires v2_dtl::sub { + requires v2_dtl::iter_sub { return (lhs - rhs) <= difference_type(0); } friend constexpr bool operator>(D lhs, D rhs) - requires v2_dtl::sub { + requires v2_dtl::iter_sub { return (lhs - rhs) > difference_type(0); } friend constexpr bool operator>=(D lhs, D rhs) - requires v2_dtl::sub { + requires v2_dtl::iter_sub { return (lhs - rhs) >= difference_type(0); } }; @@ -879,10 +880,10 @@ namespace boost { namespace stl_interfaces { BOOST_STL_INTERFACES_NAMESPACE_V2 { constexpr bool operator==(D1 lhs, D2 rhs) requires v2_dtl::derived_iter && v2_dtl::derived_iter && detail::interoperable::value && - (v2_dtl::base_eq || v2_dtl::sub) { + (v2_dtl::base_eq || v2_dtl::iter_sub) { if constexpr (v2_dtl::base_eq) { return (access::base(lhs) == access::base(rhs)); - } else if constexpr (v2_dtl::sub) { + } else if constexpr (v2_dtl::iter_sub) { return (lhs - rhs) == typename D1::difference_type(0); } }