Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::ranges::crbegin(3)	      C++ Standard Libary      std::ranges::crbegin(3)

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

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

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

	  }
	  Call signature
	  template< class T >

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

	  constexpr /* see below */ auto crbegin( T&& t	);

	  Returns an iterator to the  first  element  of  the  const-qualified
       (until C++23)
	  argument that	is treated as a	reversed sequence.
	  Returns  a  constant	iterator  to the first element of the argument
       that  (since C++23)
	  is treated as	a reversed sequence.

	  range-rbegin-rend.svg

	  Let CT be

	    * const std::remove_reference_t<T>&	if the argument	is  an	lvalue
       (i.e. T is
	      an	      lvalue		  reference		type),
       (until
	    *		     const		  T		    otherwise.
       C++23)

	  A call to ranges::crbegin is expression-equivalent to
	  ranges::rbegin(static_cast<CT&&>(t)).
	  If the argument is an	lvalue or
	  ranges::enable_borrowed_range<std::remove_cv_t<T>>  is  true,	then a
       call to
	  ranges::crbegin is expression-equivalent to:

	    * std::const_iterator<decltype(U)>(U) for some expression U	equiv-
       alent to	  (since
	      ranges::rbegin(/*possibly-const-range*/(t)).
       C++23)

	  In all other cases, a	call to	ranges::crbegin	is  ill-formed,	 which
       can result
	  in  substitution failure when	the call appears in the	immediate con-
       text of a
	  template instantiation.

	  The return type models std::input_or_output_iterator
	  and constant-iterator
	  (since C++23)	in all cases.

	 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,  regard-
       less 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 in-
       terchangeably.

	  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.

Example
       // Run this code

	#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<de-
       cltype(std::span{a})>>
	    );
	}

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

http://cppreference.com		  2024.06.10	       std::ranges::crbegin(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::crbegin&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help