46 ,
private detail::non_propagating_cache<iterator_t<Rng>, reverse_view<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))
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)()(
109 return ranges::size(rng_);
112 constexpr auto CPP_fun(size)()(
const
115 return ranges::size(rng_);