GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::ranges::crbegin(3) C++ Standard Libary std::ranges::crbegin(3)

std::ranges::crbegin - std::ranges::crbegin


Defined in header <ranges>
inline namespace /*unspecified*/ {


inline constexpr /*unspecified*/ crbegin = (since C++20)
/*unspecified*/; (customization point object)


}
Call signature
template< class T >


requires /* see below */ (since C++20)


constexpr std::input_or_output_iterator auto crbegin(
T&& t );


Returns an iterator to the first element of the const-qualified argument that is
treated as a reversed sequence.


range-rbegin-rend.svg


Let CT be


1. const std::remove_reference_t<T>& if the argument is a lvalue (i.e. T is an
lvalue reference type),
2. const T otherwise,


a call to ranges::crbegin is expression-equivalent to
ranges::rbegin(static_cast<CT&&>(t)).


The return type models std::input_or_output_iterator in both cases.


Expression-equivalent


Expression e is expression-equivalent to expression f, if


* e and f have the same effects, and
* either both are constant subexpressions or else neither is a constant
subexpression, and
* either both are potentially-throwing or else neither is potentially-throwing
(i.e. noexcept(e) == noexcept(f)).


Customization point objects


The name ranges::crbegin denotes a customization point object, which is a const
function object of a literal semiregular class type. For exposition purposes, the
cv-unqualified version of its type is denoted as __crbegin_fn.


All instances of __crbegin_fn are equal. The effects of invoking different instances
of type __crbegin_fn on the same arguments are equivalent, regardless of whether the
expression denoting the instance is an lvalue or rvalue, and is const-qualified or
not (however, a volatile-qualified instance is not required to be invocable). Thus,
ranges::crbegin can be copied freely and its copies can be used interchangeably.


Given a set of types Args..., if std::declval<Args>()... meet the requirements for
arguments to ranges::crbegin above, __crbegin_fn models


* std::invocable<__crbegin_fn, Args...>,
* std::invocable<const __crbegin_fn, Args...>,
* std::invocable<__crbegin_fn&, Args...>, and
* std::invocable<const __crbegin_fn&, Args...>.


Otherwise, no function call operator of __crbegin_fn participates in overload
resolution.


If the argument is an rvalue (i.e. T is an object type) and
ranges::enable_borrowed_range<std::remove_cv_t<T>> is false, the call to
ranges::crbegin is ill-formed, which also results in substitution failure.


The return type models std::input_or_output_iterator in all cases.

// Run this code


#include <iostream>
#include <vector>
#include <iterator>
#include <span>


int main()
{
std::vector<int> v = { 3, 1, 4 };
auto vi = std::ranges::crbegin(v);
std::cout << *vi << '\n';


int a[] = { -5, 10, 15 };
auto ai = std::ranges::crbegin(a);
std::cout << *ai << '\n';


// 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:
static_assert(std::ranges::enable_borrowed_range<
std::remove_cv_t<decltype(std::span{a})>>);
std::cout << *si << '\n';
}


4
15
15


ranges::rbegin returns a reverse iterator to a range
(C++20) (customization point object)
rbegin returns a reverse iterator to the beginning of a container or array
crbegin (function template)
(C++14)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.