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>,
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)()(
112 constexpr auto CPP_fun(
size)()(
const
119 template<
typename 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)(
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>
The bidirectional_range concept.
The common_range 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
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