44 struct RANGES_EMPTY_BASES reverse_view
45 : view_interface<reverse_view<Rng>, range_cardinality<Rng>::value>
46 ,
private detail::non_propagating_cache<iterator_t<Rng>, reverse_view<Rng>,
52 constexpr reverse_iterator<iterator_t<Rng>> begin_(std::true_type)
54 return make_reverse_iterator(ranges::end(rng_));
56 constexpr reverse_iterator<iterator_t<Rng>> begin_(std::false_type)
59 detail::non_propagating_cache<iterator_t<Rng>, reverse_view<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_);
77 reverse_view() =
default;
78 constexpr explicit reverse_view(Rng rng)
79 : rng_(detail::move(rng))
85 constexpr reverse_iterator<iterator_t<Rng>> begin()
89 template(
bool Const =
true)(
90 requires Const AND
common_range<meta::const_if_c<Const, Rng>>)
91 constexpr reverse_iterator<iterator_t<meta::const_if_c<Const, Rng>>> begin()
const
93 return make_reverse_iterator(ranges::end(rng_));
95 constexpr reverse_iterator<iterator_t<Rng>> end()
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>>)
101 constexpr reverse_iterator<iterator_t<meta::const_if_c<Const, Rng>>> end()
const
103 return make_reverse_iterator(ranges::begin(rng_));
106 constexpr auto CPP_fun(size)()(
109 return ranges::size(rng_);
112 constexpr auto CPP_fun(size)()(
const
115 return ranges::size(rng_);
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