14#ifndef RANGES_V3_VIEW_ZIP_HPP
15#define RANGES_V3_VIEW_ZIP_HPP
31#include <range/v3/detail/prologue.hpp>
38 struct indirect_zip_fn_
41 template(
typename... Its)(
42 requires (
sizeof...(Its) != 2) AND and_v<indirectly_readable<Its>...>)
43 std::tuple<iter_value_t<Its>...>
operator()(copy_tag, Its...)
const
49 template(
typename... Its)(
50 requires (
sizeof...(Its) != 2) AND and_v<indirectly_readable<Its>...>)
51 common_tuple<iter_reference_t<Its>...>
52 operator()(Its
const &... its)
const
53 noexcept(
meta::and_c<
noexcept(iter_reference_t<Its>(*its))...>::value)
55 return common_tuple<iter_reference_t<Its>...>{*its...};
59 template(
typename... Its)(
60 requires (
sizeof...(Its) != 2) AND and_v<indirectly_readable<Its>...>)
61 common_tuple<iter_rvalue_reference_t<Its>...>
62 operator()(move_tag, Its
const &... its)
const
64 iter_rvalue_reference_t<Its>(iter_move(its)))...>::value)
66 return common_tuple<iter_rvalue_reference_t<Its>...>{iter_move(its)...};
70 template(
typename It1,
typename It2)(
71 requires indirectly_readable<It1> AND indirectly_readable<It2>)
72 std::pair<iter_value_t<It1>, iter_value_t<It2>>
73 operator()(copy_tag, It1, It2)
const
79 template(
typename It1,
typename It2)(
80 requires indirectly_readable<It1> AND indirectly_readable<It2>)
81 common_pair<iter_reference_t<It1>, iter_reference_t<It2>>
82 operator()(It1
const & it1, It2
const & it2)
const
84 noexcept(iter_reference_t<It1>(*it1)) &&
85 noexcept(iter_reference_t<It2>(*it2)))
91 template(
typename It1,
typename It2)(
92 requires indirectly_readable<It1> AND indirectly_readable<It2>)
93 common_pair<iter_rvalue_reference_t<It1>, iter_rvalue_reference_t<It2>>
94 operator()(move_tag, It1
const & it1, It2
const & it2)
const
95 noexcept(
noexcept(iter_rvalue_reference_t<It1>(iter_move(it1))) &&
96 noexcept(iter_rvalue_reference_t<It2>(iter_move(it2))))
98 return {iter_move(it1), iter_move(it2)};
106 template<
typename... Rngs>
109 CPP_assert(
sizeof...(Rngs) != 0);
114 detail::indirect_zip_fn_{},
119 template<
typename... Rng>
120 RANGES_INLINE_VAR
constexpr bool enable_borrowed_range<
zip_view<Rng...>> =
121 and_v<enable_borrowed_range<Rng>...>;
123#if RANGES_CXX_DEDUCTION_GUIDES >= RANGES_CXX_DEDUCTION_GUIDES_17
124 template<
typename... Rng>
137 template(
typename... Rngs)(
140 (
sizeof...(Rngs) != 0))
141 zip_view<all_t<Rngs>...>
operator()(Rngs &&... rngs)
const
146 template(
typename Rng0)(
152 template(
typename Rng0,
typename Rng1)(
156 operator()(Rng0 && rng0, Rng1 && rng1)
const
159 all(
static_cast<Rng0 &&
>(rng0)),
160 all(
static_cast<Rng1 &&
>(rng1))};
162 template(
typename Rng0,
typename Rng1,
typename Rng2)(
167 operator()(Rng0 && rng0, Rng1 && rng1, Rng2 && rng2)
const
170 all(
static_cast<Rng0 &&
>(rng0)),
171 all(
static_cast<Rng1 &&
>(rng1)),
172 all(
static_cast<Rng2 &&
>(rng2))};
179 RANGES_INLINE_VARIABLE(
zip_fn, zip)
184#include <range/v3/detail/satisfy_boost_range.hpp>
187#include <range/v3/detail/epilogue.hpp>
The viewable_range concept.
Definition zip_with.hpp:167