std::ranges::crbegin
Min standard notice:
Header: <ranges>
const std::remove_reference_t
# Declarations
inline namespace /* unspecified */ {
inline constexpr /* unspecified */ crbegin = /* unspecified */;
}
(since C++20) (customization point object)
Call signature
template< class T >
requires /* see below */
constexpr /* see below */ auto crbegin( T&& t );
(since C++20)
# Example
#include <cassert>
#include <iterator>
#include <span>
#include <vector>
int main()
{
std::vector<int> v{3, 1, 4};
auto vi = std::ranges::crbegin(v);
assert(*vi == 4);
++vi; // OK, iterator object is mutable
assert(*vi == 1);
// *vi = 13; // Error: underlying element is read-only
int a[]{-5, 10, 15};
auto ai = std::ranges::crbegin(a);
assert(*ai == 15);
// auto x_x = std::ranges::crbegin(std::vector<int>{6, 6, 6});
// ill-formed: the argument is an rvalue (see Notes ↑)
auto si = std::ranges::crbegin(std::span{a}); // OK
assert(*si == 15);
static_assert
(
std::ranges::enable_borrowed_range<std::remove_cv_t<decltype(std::span{a})>>
);
}