14#ifndef RANGES_V3_VIEW_VIEW_HPP
15#define RANGES_V3_VIEW_VIEW_HPP
30#include <range/v3/utility/static_const.hpp>
32#include <range/v3/detail/prologue.hpp>
46 constexpr auto CPP_auto_fun(
operator())(I &&i) (
const)
53 struct view_closure_base_
61 template(
typename Rng)(
64 same_as<sentinel_t<Rng>, sentinel_t<Rng const>>);
68 template<
typename Rng>
76 template(
typename ViewFn,
typename Rng)(
78 !derived_from<invoke_result_t<ViewFn, Rng>, detail::view_closure_base_>);
82 template<
typename ViewFn,
typename Rng>
88 template<
typename Rng>
89 constexpr bool simple_view() noexcept
96 template<
typename Fun>
109 struct RANGES_STRUCT_WITH_ADL_BARRIER(view_closure_base)
110 : detail::view_closure_base_
114 template(
typename Rng,
typename ViewFn)(
117 friend constexpr auto operator|(Rng && rng, view_closure<ViewFn> vw)
119 return static_cast<ViewFn &&
>(vw)(
static_cast<Rng &&
>(rng));
122#ifndef RANGES_WORKAROUND_CLANG_43400
125 template<
typename Rng,
typename ViewFn>
126 friend constexpr auto
127 operator|(Rng &&, view_closure<ViewFn>
const &)
129 -> CPP_broken_friend_ret(Rng)(
130 requires range<Rng> &&
131 (!viewable_range<Rng>)) =
delete;
141 template<
typename ViewFn,
typename Pipeable>
142 friend constexpr auto operator|(view_closure<ViewFn> vw, Pipeable pipe)
143 -> CPP_broken_friend_ret(view_closure<composed<Pipeable, ViewFn>>)(
144 requires (is_pipeable_v<Pipeable>))
146 return make_view_closure(
147 compose(
static_cast<Pipeable &&
>(pipe),
static_cast<ViewFn &&
>(vw)));
151#ifdef RANGES_WORKAROUND_CLANG_43400
152 namespace RANGES_ADL_BARRIER_FOR(view_closure_base)
156 template(
typename Rng,
typename ViewFn)(
159 operator|(Rng &&, view_closure<ViewFn>
const &)
174 template<
typename ViewFn>
175 struct RANGES_EMPTY_BASES view_closure
179 view_closure() =
default;
181 constexpr explicit view_closure(ViewFn fn)
182 : ViewFn(
static_cast<ViewFn &&
>(fn))
190 template<
typename ViewFn>
194 template<
typename... Ts,
typename V = ViewFn>
195 static constexpr auto CPP_auto_fun(bind)(Ts &&... ts)
197 return V::bind(
static_cast<Ts &&
>(ts)...)
203 using view_access RANGES_DEPRECATED(
204 "view_access and views::view<> are deprecated. Please "
205 "replace view<> with view_closure<> and discontinue use of view_access.") =
213 template<
typename Fun>
214 constexpr old_view_<Fun> operator()(Fun fun)
const
216 return old_view_<Fun>{
static_cast<Fun &&
>(fun)};
219 using make_view_fn RANGES_DEPRECATED(
220 "make_view_fn is deprecated. Please use "
221 "make_view_closure instead.") = make_view_fn_;
226 "make_view and views::view<> has been deprecated. Please switch to "
227 "make_view_closure and views::view_closure.")
228 RANGES_INLINE_VAR constexpr auto & make_view =
232 template<typename ViewFn>
240 template(
typename Rng,
typename Vw)(
242 static constexpr auto pipe(Rng && rng, Vw && v)
244 return v.vw_(
static_cast<Rng &&
>(rng));
248 old_view_() =
default;
250 constexpr explicit old_view_(ViewFn a)
noexcept(
251 std::is_nothrow_move_constructible<ViewFn>::value)
256 template(
typename Rng,
typename... Rest)(
258 constexpr invoke_result_t<ViewFn
const &, Rng, Rest...>
259 operator()(Rng && rng, Rest &&... rest)
const
261 return vw_(
static_cast<Rng &&
>(rng),
static_cast<Rest &&
>(rest)...);
266 template<
typename... Ts,
typename V = ViewFn>
267 constexpr auto CPP_auto_fun(
operator())(Ts &&... ts)(
const)
269 return make_view_fn_{}(
270 view_access_::impl<V>::bind(vw_,
static_cast<Ts &&
>(ts)...))
275 template<
typename ViewFn>
276 using view RANGES_DEPRECATED(
277 "The views::view<> template is deprecated. Please switch to view_closure") =
282 template<
typename ViewFn>
283 RANGES_INLINE_VAR
constexpr bool is_pipeable_v<views::view_closure<ViewFn>> =
true;
287#include <range/v3/detail/epilogue.hpp>
The invocable_view_closure_ concept.
The invocable_view_closure concept.
The simple_view_ concept.
The simple_view_impl_ concept.
The viewable_range concept.
RANGES_INLINE_VARIABLE(detail::to_container_fn< detail::from_range< std::vector > >, to_vector) template< template< typename... > class ContT > auto to(RANGES_HIDDEN_DETAIL(detail
For initializing a container of the specified type with the elements of an Range.
Definition conversion.hpp:399
decltype(begin(declval(Rng &))) iterator_t
Definition access.hpp:698
Definition range_fwd.hpp:152
Definition pipeable.hpp:67
Definition pipeable.hpp:76
Definition static_const.hpp:22