diff --git a/libcxx/include/__ranges/concepts.h b/libcxx/include/__ranges/concepts.h index bf75fe8a6fef4..aec85a28f19f7 100644 --- a/libcxx/include/__ranges/concepts.h +++ b/libcxx/include/__ranges/concepts.h @@ -10,9 +10,7 @@ #ifndef _LIBCPP___RANGES_CONCEPTS_H #define _LIBCPP___RANGES_CONCEPTS_H -#include <__concepts/common_reference_with.h> #include <__concepts/constructible.h> -#include <__concepts/convertible_to.h> #include <__concepts/movable.h> #include <__concepts/same_as.h> #include <__config> @@ -20,15 +18,12 @@ #include <__iterator/incrementable_traits.h> #include <__iterator/iter_move.h> #include <__iterator/iterator_traits.h> -#include <__iterator/readable_traits.h> #include <__ranges/access.h> #include <__ranges/data.h> #include <__ranges/enable_borrowed_range.h> #include <__ranges/enable_view.h> #include <__ranges/size.h> #include <__type_traits/add_pointer.h> -#include <__type_traits/common_reference.h> -#include <__type_traits/common_type.h> #include <__type_traits/is_reference.h> #include <__type_traits/remove_cvref.h> #include <__type_traits/remove_reference.h> @@ -137,42 +132,6 @@ concept viewable_range = (is_lvalue_reference_v<_Tp> || (movable> && !__is_std_initializer_list>)))); -# if _LIBCPP_STD_VER >= 23 - -template -using __concat_reference_t _LIBCPP_NODEBUG = common_reference_t...>; - -template -using __concat_value_t _LIBCPP_NODEBUG = common_type_t...>; - -template -using __concat_rvalue_reference_t _LIBCPP_NODEBUG = common_reference_t...>; - -template -concept __concat_indirectly_readable_impl = requires(const _It __it) { - { *__it } -> convertible_to<_Ref>; - { ranges::iter_move(__it) } -> convertible_to<_RRef>; -}; - -template -concept __concat_indirectly_readable = - common_reference_with<__concat_reference_t<_Rs...>&&, __concat_value_t<_Rs...>&> && - common_reference_with<__concat_reference_t<_Rs...>&&, __concat_rvalue_reference_t<_Rs...>&&> && - common_reference_with<__concat_rvalue_reference_t<_Rs...>&&, const __concat_value_t<_Rs...>&> && - (__concat_indirectly_readable_impl<__concat_reference_t<_Rs...>, - __concat_rvalue_reference_t<_Rs...>, - iterator_t<_Rs>> && - ...); - -template -concept __concatable = requires { - typename __concat_reference_t<_Rs...>; - typename __concat_value_t<_Rs...>; - typename __concat_rvalue_reference_t<_Rs...>; -} && __concat_indirectly_readable<_Rs...>; - -# endif // _LIBCPP_STD_VER >= 23 - } // namespace ranges #endif // _LIBCPP_STD_VER >= 20 diff --git a/libcxx/include/__ranges/join_with_view.h b/libcxx/include/__ranges/join_with_view.h index 8ed989a664687..792a26e843934 100644 --- a/libcxx/include/__ranges/join_with_view.h +++ b/libcxx/include/__ranges/join_with_view.h @@ -54,6 +54,39 @@ _LIBCPP_BEGIN_NAMESPACE_STD #if _LIBCPP_STD_VER >= 23 namespace ranges { + +template +using __concat_reference_t _LIBCPP_NODEBUG = common_reference_t...>; + +template +using __concat_value_t _LIBCPP_NODEBUG = common_type_t...>; + +template +using __concat_rvalue_reference_t _LIBCPP_NODEBUG = common_reference_t...>; + +template +concept __concat_indirectly_readable_impl = requires(const _It __it) { + { *__it } -> convertible_to<_Ref>; + { ranges::iter_move(__it) } -> convertible_to<_RRef>; +}; + +template +concept __concat_indirectly_readable = + common_reference_with<__concat_reference_t<_Rs...>&&, __concat_value_t<_Rs...>&> && + common_reference_with<__concat_reference_t<_Rs...>&&, __concat_rvalue_reference_t<_Rs...>&&> && + common_reference_with<__concat_rvalue_reference_t<_Rs...>&&, const __concat_value_t<_Rs...>&> && + (__concat_indirectly_readable_impl<__concat_reference_t<_Rs...>, + __concat_rvalue_reference_t<_Rs...>, + iterator_t<_Rs>> && + ...); + +template +concept __concatable = requires { + typename __concat_reference_t<_Rs...>; + typename __concat_value_t<_Rs...>; + typename __concat_rvalue_reference_t<_Rs...>; +} && __concat_indirectly_readable<_Rs...>; + template concept __bidirectional_common = bidirectional_range<_Range> && common_range<_Range>;