aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std/ranges
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/include/std/ranges')
-rw-r--r--libstdc++-v3/include/std/ranges48
1 files changed, 18 insertions, 30 deletions
diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges
index f2413ba..7d73985 100644
--- a/libstdc++-v3/include/std/ranges
+++ b/libstdc++-v3/include/std/ranges
@@ -2389,11 +2389,7 @@ namespace views::__adaptor
inline constexpr bool __is_basic_string_view<basic_string_view<_CharT, _Traits>>
= true;
- template<typename _Range>
- inline constexpr bool __is_subrange = false;
-
- template<typename _Iter, typename _Sent, subrange_kind _Kind>
- inline constexpr bool __is_subrange<subrange<_Iter, _Sent, _Kind>> = true;
+ using ranges::__detail::__is_subrange;
template<typename _Range>
inline constexpr bool __is_iota_view = false;
@@ -4166,6 +4162,10 @@ namespace views::__adaptor
namespace __detail
{
+#if __cpp_lib_tuple_like // >= C++23
+ template<typename _Tp, size_t _Nm>
+ concept __has_tuple_element = __tuple_like<_Tp> && _Nm < tuple_size_v<_Tp>;
+#else
template<typename _Tp, size_t _Nm>
concept __has_tuple_element = requires(_Tp __t)
{
@@ -4175,6 +4175,7 @@ namespace views::__adaptor
{ std::get<_Nm>(__t) }
-> convertible_to<const tuple_element_t<_Nm, _Tp>&>;
};
+#endif
template<typename _Tp, size_t _Nm>
concept __returnable_element
@@ -4559,23 +4560,12 @@ namespace views::__adaptor
|| (!(bidirectional_range<_Rs> && ...) && (common_range<_Rs> && ...))
|| ((random_access_range<_Rs> && ...) && (sized_range<_Rs> && ...));
- template<typename... _Ts>
- struct __tuple_or_pair
- { using type = std::tuple<_Ts...>; };
-
- template<typename _Tp, typename _Up>
- struct __tuple_or_pair<_Tp, _Up>
- { using type = pair<_Tp, _Up>; };
-
- template<typename... _Ts>
- using __tuple_or_pair_t = typename __tuple_or_pair<_Ts...>::type;
-
template<typename _Fp, typename _Tuple>
constexpr auto
__tuple_transform(_Fp&& __f, _Tuple&& __tuple)
{
return std::apply([&]<typename... _Ts>(_Ts&&... __elts) {
- return __tuple_or_pair_t<invoke_result_t<_Fp&, _Ts>...>
+ return tuple<invoke_result_t<_Fp&, _Ts>...>
(std::__invoke(__f, std::forward<_Ts>(__elts))...);
}, std::forward<_Tuple>(__tuple));
}
@@ -4696,7 +4686,7 @@ namespace views::__adaptor
#ifdef __clang__ // LLVM-61763 workaround
public:
#endif
- __detail::__tuple_or_pair_t<iterator_t<__detail::__maybe_const_t<_Const, _Vs>>...> _M_current;
+ tuple<iterator_t<__detail::__maybe_const_t<_Const, _Vs>>...> _M_current;
constexpr explicit
_Iterator(decltype(_M_current) __current)
@@ -4728,7 +4718,7 @@ namespace views::__adaptor
// iterator_category defined in __zip_view_iter_cat
using iterator_concept = decltype(_S_iter_concept());
using value_type
- = __detail::__tuple_or_pair_t<range_value_t<__detail::__maybe_const_t<_Const, _Vs>>...>;
+ = tuple<range_value_t<__detail::__maybe_const_t<_Const, _Vs>>...>;
using difference_type
= common_type_t<range_difference_t<__detail::__maybe_const_t<_Const, _Vs>>...>;
@@ -4900,7 +4890,7 @@ namespace views::__adaptor
template<bool _Const>
class zip_view<_Vs...>::_Sentinel
{
- __detail::__tuple_or_pair_t<sentinel_t<__detail::__maybe_const_t<_Const, _Vs>>...> _M_end;
+ tuple<sentinel_t<__detail::__maybe_const_t<_Const, _Vs>>...> _M_end;
constexpr explicit
_Sentinel(decltype(_M_end) __end)
@@ -8325,8 +8315,7 @@ namespace views::__adaptor
&& __detail::__cartesian_product_is_common<_First, _Vs...>)
{
auto __its = [this]<size_t... _Is>(index_sequence<_Is...>) {
- using _Ret = __detail::__tuple_or_pair_t<iterator_t<_First>,
- iterator_t<_Vs>...>;
+ using _Ret = tuple<iterator_t<_First>, iterator_t<_Vs>...>;
bool __empty_tail = (ranges::empty(std::get<1 + _Is>(_M_bases)) || ...);
auto& __first = std::get<0>(_M_bases);
return _Ret{(__empty_tail
@@ -8342,8 +8331,7 @@ namespace views::__adaptor
end() const requires __detail::__cartesian_product_is_common<const _First, const _Vs...>
{
auto __its = [this]<size_t... _Is>(index_sequence<_Is...>) {
- using _Ret = __detail::__tuple_or_pair_t<iterator_t<const _First>,
- iterator_t<const _Vs>...>;
+ using _Ret = tuple<iterator_t<const _First>, iterator_t<const _Vs>...>;
bool __empty_tail = (ranges::empty(std::get<1 + _Is>(_M_bases)) || ...);
auto& __first = std::get<0>(_M_bases);
return _Ret{(__empty_tail
@@ -8416,8 +8404,8 @@ namespace views::__adaptor
{
using _Parent = __maybe_const_t<_Const, cartesian_product_view>;
_Parent* _M_parent = nullptr;
- __detail::__tuple_or_pair_t<iterator_t<__maybe_const_t<_Const, _First>>,
- iterator_t<__maybe_const_t<_Const, _Vs>>...> _M_current;
+ tuple<iterator_t<__maybe_const_t<_Const, _First>>,
+ iterator_t<__maybe_const_t<_Const, _Vs>>...> _M_current;
constexpr
_Iterator(_Parent& __parent, decltype(_M_current) __current)
@@ -8444,11 +8432,11 @@ namespace views::__adaptor
using iterator_category = input_iterator_tag;
using iterator_concept = decltype(_S_iter_concept());
using value_type
- = __detail::__tuple_or_pair_t<range_value_t<__maybe_const_t<_Const, _First>>,
- range_value_t<__maybe_const_t<_Const, _Vs>>...>;
+ = tuple<range_value_t<__maybe_const_t<_Const, _First>>,
+ range_value_t<__maybe_const_t<_Const, _Vs>>...>;
using reference
- = __detail::__tuple_or_pair_t<range_reference_t<__maybe_const_t<_Const, _First>>,
- range_reference_t<__maybe_const_t<_Const, _Vs>>...>;
+ = tuple<range_reference_t<__maybe_const_t<_Const, _First>>,
+ range_reference_t<__maybe_const_t<_Const, _Vs>>...>;
using difference_type = decltype(cartesian_product_view::_S_difference_type());
_Iterator() = default;