14 #ifndef RANGES_V3_VIEW_REVERSE_HPP
15 #define RANGES_V3_VIEW_REVERSE_HPP
32 #include <range/v3/utility/static_const.hpp>
37 #include <range/v3/detail/prologue.hpp>
43 template<
typename Rng>
46 ,
private detail::non_propagating_cache<iterator_t<Rng>, reverse_view<Rng>,
50 CPP_assert(bidirectional_range<Rng>);
54 return make_reverse_iterator(ranges::end(rng_));
60 auto & end_ =
static_cast<cache_t &
>(*this);
64 auto tmp = ranges::begin(rng_);
65 auto e = ranges::end(rng_);
69 auto tmp = ranges::next(ranges::begin(rng_), ranges::end(rng_));
71 end_ = std::move(tmp);
73 return make_reverse_iterator(*end_);
79 : rng_(detail::move(rng))
87 return begin_(
meta::bool_<(
bool)common_range<Rng>>{});
89 template(
bool Const =
true)(
90 requires Const AND
common_range<meta::const_if_c<Const, Rng>>)
93 return make_reverse_iterator(ranges::end(rng_));
97 return make_reverse_iterator(ranges::begin(rng_));
99 template(
bool Const =
true)(
100 requires Const AND
common_range<meta::const_if_c<Const, Rng>>)
103 return make_reverse_iterator(ranges::begin(rng_));
106 constexpr
auto CPP_fun(
size)()(
107 requires sized_range<Rng>)
112 constexpr
auto CPP_fun(
size)()(
const
113 requires sized_range<Rng const>)
119 template<
typename Rng>
122 CPP_assert(bidirectional_range<Rng>);
138 template<
typename Rng>
139 RANGES_INLINE_VAR constexpr
bool enable_borrowed_range<reverse_view<Rng>> =
140 enable_borrowed_range<Rng>;
142 #if RANGES_CXX_DEDUCTION_GUIDES >= RANGES_CXX_DEDUCTION_GUIDES_17
143 template<
typename Rng>
147 template<
typename Rng>
156 template(
typename Rng)(
157 requires viewable_range<Rng> AND bidirectional_range<Rng>)
173 using ranges::views::reverse;
175 template(
typename Rng)(
176 requires view_<Rng> AND bidirectional_range<Rng>)
182 #include <range/v3/detail/epilogue.hpp>
183 #include <range/v3/detail/satisfy_boost_range.hpp>
CPP_concept common_range
\concept common_range
Definition: concepts.hpp:180
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
std::integral_constant< bool, B > bool_
An integral constant wrapper for bool.
Definition: meta.hpp:168
meta::size_t< L::size()> size
An integral constant wrapper that is the size of the meta::list L.
Definition: meta.hpp:1696
Definition: basic_iterator.hpp:532
Definition: reverse.hpp:48
Definition: interface.hpp:129
Definition: reverse.hpp:155