diff options
Diffstat (limited to 'contrib/llvm-project/libcxx/include/__ranges/rend.h')
-rw-r--r-- | contrib/llvm-project/libcxx/include/__ranges/rend.h | 71 |
1 files changed, 29 insertions, 42 deletions
diff --git a/contrib/llvm-project/libcxx/include/__ranges/rend.h b/contrib/llvm-project/libcxx/include/__ranges/rend.h index 7ee574ccfa67..58d98aafd264 100644 --- a/contrib/llvm-project/libcxx/include/__ranges/rend.h +++ b/contrib/llvm-project/libcxx/include/__ranges/rend.h @@ -37,60 +37,47 @@ _LIBCPP_BEGIN_NAMESPACE_STD namespace ranges { namespace __rend { template <class _Tp> -concept __member_rend = - __can_borrow<_Tp> && - __workaround_52970<_Tp> && - requires(_Tp&& __t) { - ranges::rbegin(__t); - { _LIBCPP_AUTO_CAST(__t.rend()) } -> sentinel_for<decltype(ranges::rbegin(__t))>; - }; - -void rend(auto&) = delete; +concept __member_rend = __can_borrow<_Tp> && __workaround_52970<_Tp> && requires(_Tp&& __t) { + ranges::rbegin(__t); + { _LIBCPP_AUTO_CAST(__t.rend()) } -> sentinel_for<decltype(ranges::rbegin(__t))>; +}; + +void rend(auto&) = delete; void rend(const auto&) = delete; template <class _Tp> concept __unqualified_rend = - !__member_rend<_Tp> && - __can_borrow<_Tp> && - __class_or_enum<remove_cvref_t<_Tp>> && - requires(_Tp&& __t) { - ranges::rbegin(__t); - { _LIBCPP_AUTO_CAST(rend(__t)) } -> sentinel_for<decltype(ranges::rbegin(__t))>; - }; + !__member_rend<_Tp> && __can_borrow<_Tp> && __class_or_enum<remove_cvref_t<_Tp>> && requires(_Tp&& __t) { + ranges::rbegin(__t); + { _LIBCPP_AUTO_CAST(rend(__t)) } -> sentinel_for<decltype(ranges::rbegin(__t))>; + }; template <class _Tp> -concept __can_reverse = - __can_borrow<_Tp> && - !__member_rend<_Tp> && - !__unqualified_rend<_Tp> && - requires(_Tp&& __t) { - { ranges::begin(__t) } -> same_as<decltype(ranges::end(__t))>; - { ranges::begin(__t) } -> bidirectional_iterator; - }; +concept __can_reverse = __can_borrow<_Tp> && !__member_rend<_Tp> && !__unqualified_rend<_Tp> && requires(_Tp&& __t) { + { ranges::begin(__t) } -> same_as<decltype(ranges::end(__t))>; + { ranges::begin(__t) } -> bidirectional_iterator; +}; class __fn { public: template <class _Tp> requires __member_rend<_Tp> [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const - noexcept(noexcept(_LIBCPP_AUTO_CAST(__t.rend()))) - { + noexcept(noexcept(_LIBCPP_AUTO_CAST(__t.rend()))) { return _LIBCPP_AUTO_CAST(__t.rend()); } template <class _Tp> requires __unqualified_rend<_Tp> [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const - noexcept(noexcept(_LIBCPP_AUTO_CAST(rend(__t)))) - { + noexcept(noexcept(_LIBCPP_AUTO_CAST(rend(__t)))) { return _LIBCPP_AUTO_CAST(rend(__t)); } template <class _Tp> requires __can_reverse<_Tp> [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const - noexcept(noexcept(ranges::begin(__t))) - { + noexcept(noexcept(ranges::begin(__t))) { return std::make_reverse_iterator(ranges::begin(__t)); } @@ -99,7 +86,7 @@ public: } // namespace __rend inline namespace __cpo { - inline constexpr auto rend = __rend::__fn{}; +inline constexpr auto rend = __rend::__fn{}; } // namespace __cpo } // namespace ranges @@ -110,24 +97,24 @@ namespace __crend { struct __fn { template <class _Tp> requires is_lvalue_reference_v<_Tp&&> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI - constexpr auto operator()(_Tp&& __t) const - noexcept(noexcept(ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t)))) - -> decltype( ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t))) - { return ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t)); } + [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const + noexcept(noexcept(ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t)))) + -> decltype(ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t))) { + return ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t)); + } template <class _Tp> requires is_rvalue_reference_v<_Tp&&> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI - constexpr auto operator()(_Tp&& __t) const - noexcept(noexcept(ranges::rend(static_cast<const _Tp&&>(__t)))) - -> decltype( ranges::rend(static_cast<const _Tp&&>(__t))) - { return ranges::rend(static_cast<const _Tp&&>(__t)); } + [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const + noexcept(noexcept(ranges::rend(static_cast<const _Tp&&>(__t)))) + -> decltype(ranges::rend(static_cast<const _Tp&&>(__t))) { + return ranges::rend(static_cast<const _Tp&&>(__t)); + } }; } // namespace __crend inline namespace __cpo { - inline constexpr auto crend = __crend::__fn{}; +inline constexpr auto crend = __crend::__fn{}; } // namespace __cpo } // namespace ranges |