diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2023-07-26 19:03:47 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2023-07-26 19:04:23 +0000 | 
| commit | 7fa27ce4a07f19b07799a767fc29416f3b625afb (patch) | |
| tree | 27825c83636c4de341eb09a74f49f5d38a15d165 /libcxx/include/__algorithm/ranges_lexicographical_compare.h | |
| parent | e3b557809604d036af6e00c60f012c2025b59a5e (diff) | |
Diffstat (limited to 'libcxx/include/__algorithm/ranges_lexicographical_compare.h')
| -rw-r--r-- | libcxx/include/__algorithm/ranges_lexicographical_compare.h | 77 | 
1 files changed, 40 insertions, 37 deletions
| diff --git a/libcxx/include/__algorithm/ranges_lexicographical_compare.h b/libcxx/include/__algorithm/ranges_lexicographical_compare.h index 2972e327169d..5b843dfd7b31 100644 --- a/libcxx/include/__algorithm/ranges_lexicographical_compare.h +++ b/libcxx/include/__algorithm/ranges_lexicographical_compare.h @@ -23,24 +23,24 @@  #  pragma GCC system_header  #endif -#if _LIBCPP_STD_VER > 17 +#if _LIBCPP_STD_VER >= 20  _LIBCPP_BEGIN_NAMESPACE_STD  namespace ranges {  namespace __lexicographical_compare {  struct __fn { -    template <class _Iter1, class _Sent1, class _Iter2, class _Sent2, class _Proj1, class _Proj2, class _Comp> -  _LIBCPP_HIDE_FROM_ABI constexpr static -  bool __lexicographical_compare_impl(_Iter1 __first1, _Sent1 __last1, -                                      _Iter2 __first2, _Sent2 __last2, -                                      _Comp& __comp, -                                      _Proj1& __proj1, -                                      _Proj2& __proj2) { +  _LIBCPP_HIDE_FROM_ABI constexpr static bool __lexicographical_compare_impl( +      _Iter1 __first1, +      _Sent1 __last1, +      _Iter2 __first2, +      _Sent2 __last2, +      _Comp& __comp, +      _Proj1& __proj1, +      _Proj2& __proj2) {      while (__first2 != __last2) { -      if (__first1 == __last1 -       || std::invoke(__comp, std::invoke(__proj1, *__first1), std::invoke(__proj2, *__first2))) +      if (__first1 == __last1 || std::invoke(__comp, std::invoke(__proj1, *__first1), std::invoke(__proj2, *__first2)))          return true;        if (std::invoke(__comp, std::invoke(__proj2, *__first2), std::invoke(__proj1, *__first1)))          return false; @@ -50,49 +50,52 @@ struct __fn {      return false;    } -  template <input_iterator _Iter1, sentinel_for<_Iter1> _Sent1, -            input_iterator _Iter2, sentinel_for<_Iter2> _Sent2, -            class _Proj1 = identity, -            class _Proj2 = identity, +  template <input_iterator _Iter1, +            sentinel_for<_Iter1> _Sent1, +            input_iterator _Iter2, +            sentinel_for<_Iter2> _Sent2, +            class _Proj1                                                                           = identity, +            class _Proj2                                                                           = identity,              indirect_strict_weak_order<projected<_Iter1, _Proj1>, projected<_Iter2, _Proj2>> _Comp = ranges::less> -  _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr -  bool operator()(_Iter1 __first1, _Sent1 __last1, -                  _Iter2 __first2, _Sent2 __last2, -                  _Comp __comp = {}, -                  _Proj1 __proj1 = {}, -                  _Proj2 __proj2 = {}) const { -    return __lexicographical_compare_impl(std::move(__first1), std::move(__last1), -                                          std::move(__first2), std::move(__last2), -                                          __comp, -                                          __proj1, -                                          __proj2); +  _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( +      _Iter1 __first1, +      _Sent1 __last1, +      _Iter2 __first2, +      _Sent2 __last2, +      _Comp __comp   = {}, +      _Proj1 __proj1 = {}, +      _Proj2 __proj2 = {}) const { +    return __lexicographical_compare_impl( +        std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __comp, __proj1, __proj2);    }    template <input_range _Range1,              input_range _Range2,              class _Proj1 = identity,              class _Proj2 = identity, -            indirect_strict_weak_order<projected<iterator_t<_Range1>, _Proj1>, -                                       projected<iterator_t<_Range2>, _Proj2>> _Comp = ranges::less> -  _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr -  bool operator()(_Range1&& __range1, _Range2&& __range2, _Comp __comp = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { -    return __lexicographical_compare_impl(ranges::begin(__range1), ranges::end(__range1), -                                          ranges::begin(__range2), ranges::end(__range2), -                                          __comp, -                                          __proj1, -                                          __proj2); +            indirect_strict_weak_order<projected<iterator_t<_Range1>, _Proj1>, projected<iterator_t<_Range2>, _Proj2>> +                _Comp = ranges::less> +  _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( +      _Range1&& __range1, _Range2&& __range2, _Comp __comp = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { +    return __lexicographical_compare_impl( +        ranges::begin(__range1), +        ranges::end(__range1), +        ranges::begin(__range2), +        ranges::end(__range2), +        __comp, +        __proj1, +        __proj2);    } -  };  } // namespace __lexicographical_compare  inline namespace __cpo { -  inline constexpr auto lexicographical_compare = __lexicographical_compare::__fn{}; +inline constexpr auto lexicographical_compare = __lexicographical_compare::__fn{};  } // namespace __cpo  } // namespace ranges  _LIBCPP_END_NAMESPACE_STD -#endif // _LIBCPP_STD_VER > 17 +#endif // _LIBCPP_STD_VER >= 20  #endif // _LIBCPP___ALGORITHM_RANGES_LEXICOGRAPHICAL_COMPARE_H | 
