15#ifndef RANGES_V3_RANGE_OPERATIONS_HPP
16#define RANGES_V3_RANGE_OPERATIONS_HPP
26#include <range/v3/utility/static_const.hpp>
28#include <range/v3/detail/prologue.hpp>
38 template(
typename Rng)(
41 constexpr range_reference_t<Rng>
42 operator()(Rng && rng, range_difference_t<Rng> n)
const
46 return ranges::begin(rng)[n];
50 template<
typename Rng>
51 static constexpr void check_throw(Rng && rng, range_difference_t<Rng> n)
53 (n < 0 || n >= ranges::distance(rng)) ?
throw std::out_of_range(
"ranges::at")
62 RANGES_INLINE_VARIABLE(at_fn, at)
70 template(
typename Rng,
typename Int)(
72 constexpr range_reference_t<Rng> operator()(Rng && rng, Int n)
const
74 using D = range_difference_t<Rng>;
75 RANGES_EXPECT(0 <=
static_cast<D
>(n));
77 static_cast<D
>(n) < ranges::distance(rng));
78 return ranges::begin(rng)[
static_cast<D
>(n)];
86 RANGES_INLINE_VARIABLE(index_fn, index)
92 template(
typename Rng)(
95 constexpr range_reference_t<Rng> operator()(Rng && rng)
const
97 return *prev(end(rng));
103 RANGES_INLINE_VARIABLE(back_fn, back)
109 template(
typename Rng)(
111 constexpr range_reference_t<Rng> operator()(Rng && rng)
const
119 RANGES_INLINE_VARIABLE(front_fn, front)
122#include <range/v3/detail/epilogue.hpp>
The bidirectional_range concept.
The borrowed_range concept.
The common_range concept.
The forward_range concept.
The random_access_range concept.
Checked indexed range access.
Definition operations.hpp:36
Unchecked indexed range access.
Definition operations.hpp:90
Definition operations.hpp:107
Checked indexed range access.
Definition operations.hpp:68