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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::ranges::end	- std::ranges::end

Synopsis
	  Defined in header <ranges>
	  Defined in header <iterator>
	  inline namespace /* unspecified */ {
									  (since
       C++20)
	      inline   constexpr  /*  unspecified  */  end  =  /*  unspecified
       (customization point
	  */;								   ob-
       ject)

	  }
	  Call signature
	  template< class T >

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

	  constexpr std::sentinel_for<ranges::iterator_t<T>> auto end(
	  T&& t	);

	  Returns a sentinel indicating	the end	of a range.

	  range-begin-end.svg

	  If   the   argument	is   an	   lvalue    or	   ranges::enable_bor-
       rowed_range<std::remove_cv_t<T>>
	  is true, then	a call to ranges::end is expression-equivalent to:

	   1. t	+ std::extent_v<T> if t	has an array type of known bound.
		 * If std::remove_all_extents_t<std::remove_reference_t<T>> is
       incomplete,
		   then	 the  call to ranges::end is ill-formed, no diagnostic
       required.
	   2. Otherwise,
	      decay-copy(t.end())
	      (until C++23)
	      auto(t.end())
	      (since C++23), if	that expression	is valid, and its type models
	      std::sentinel_for<ranges::iterator_t<T>>.
	   3. Otherwise,
	      decay-copy(end(t))
	      (until C++23)
	      auto(end(t))
	      (since C++23), if	T is a class or	enumeration type, that expres-
       sion is valid and
	      its  converted  type   models   std::sentinel_for<ranges::itera-
       tor_t<T>>, where	the
	      meaning  of  end is established as if by performing argument-de-
       pendent lookup
	      only.

	  In all other cases, a	call to	ranges::end is ill-formed,  which  can
       result in
	  substitution failure when the	call to	ranges::end appears in the im-
       mediate context
	  of a template	instantiation.

Notes
	  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, or if
       it is of	an array
	  type of unknown bound, the call to ranges::end is ill-formed,	 which
       also results in
	  substitution failure.

	  If ranges::end(std::forward<T>(t)) is	valid, then
	  decltype(ranges::end(std::forward<T>(t))) and
	  decltype(ranges::begin(std::forward<T>(t)))  model std::sentinel_for
       in all cases,
	  while	T models std::ranges::range.

	  The C++20 standard requires that if the underlying end function call
       returns a
	  prvalue, the return value is move-constructed	from the  materialized
       temporary
	  object. All implementations directly return the prvalue instead. The
       requirement is
	  corrected  by	the post-C++20 proposal	P0849R8	to match the implemen-
       tations.

Example
       // Run this code

	#include <algorithm>
	#include <iostream>
	#include <ranges>
	#include <vector>

	int main()
	{
	    std::vector<int> vec{3, 1, 4};
	    if (std::ranges::find(vec, 5) != std::ranges::end(vec))
		std::cout << "found a 5	in vector vec!\n";

	    int	arr[]{5, 10, 15};
	    if (std::ranges::find(arr, 5) != std::ranges::end(arr))
		std::cout << "found a 5	in array arr!\n";
	}

Output:
	found a	5 in array arr!

	  Defect reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	    DR	     Applied	to		 Behavior     as     published
       Correct behavior
	  P2602R2  C++20       there's	machinery to prohibit certain	   re-
       moved such machinery
			     non-member	end found by ADL

See also
	  ranges::cend	returns	a sentinel indicating the end of  a  read-only
       range
	  (C++20)	(customization point object)
	  ranges::begin	returns	an iterator to the beginning of	a range
	  (C++20)	(customization point object)
	  end
	  cend		returns	an iterator to the end of a container or array
	  (C++11)	(function template)
	  (C++14)

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

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

home | help