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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::ranges::iter_swap -	std::ranges::iter_swap

Synopsis
	  Defined in header <iterator>
	  namespace ranges {

	      inline	   namespace	   /*	    unspecified	     */	     {
       (since C++20)
		  inline       constexpr       /*	 unspecified	    */
       (customization
		      iter_swap	       =	/*	 unspecified	   */;
       point object)
	      }

	  }
	  Call signature
	  template< class I1, class I2 >
	  constexpr void iter_swap( I1&& i1, I2&& i2 ) noexcept(/*  see	 below
       (since C++20)
	  */);
	  Helper function
	  template< class X, class Y >

	  constexpr std::iter_value_t<X>
	      iter-exchange-move(	X&&	  x,	   Y&&	     y	     )
       (exposition
										only*)
	  noexcept(noexcept(std::iter_value_t<X>(std::ranges::iter_move(x)))
	  &&

		       noexcept(*x = std::ranges::iter_move(y)));

	  Swaps	values denoted by two iterators.

	  The effect of	the exposition-only helper function iter-exchange-move
       is equivalent
	  to

	std::iter_value_t<X> old(std::ranges::iter_move(x));
	*x = std::ranges::iter_move(y);
	return old;

	  ranges::iter_swap(i1,	i2) is expression-equivalent to:

	   1. (void)iter_swap(i1, i2), if i1 or	i2 has a class or  enumeration
       type and	the
	      expression  is  well-formed,  where  the	overload resolution of
       iter_swap is
	      performed	with the  additional  candidate	 void  iter_swap(auto,
       auto) =
	      delete;^[1], excluding std::ranges::iter_swap itself.
		 *  If	the  selected overload does not	exchange the value de-
       noted by	i1 and i2,
		   the program is ill-formed, no diagnostic required.
	   2. Otherwise, ranges::swap(*i1, *i2)	if both	I1 and I2 model	 indi-
       rectly_readable
	      and  if  std::iter_reference_t<I1> and std::iter_reference_t<I2>
       model
	      swappable_with.
	   3. Otherwise, (void)(*i1 = iter-exchange-move(i2, i1)), if
	      std::indirectly_movable_storable<I1, I2> and
	      std::indirectly_movable_storable<I2, I1> are both	 modeled,  ex-
       cept that i1 is
	      only evaluated once.
	   4.  Otherwise,  ranges::iter_swap(i1,  i2) is ill-formed, which can
       result in
	      substitution failure when	ranges::iter_swap(i1, i2)  appears  in
       the immediate
	      context of a template instantiation.
	   1.  This precludes calling unconstrained std::iter_swap.

	 Customization point objects

	  The  name  ranges::iter_swap	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 __iter_swap_fn.

	  All  instances  of __iter_swap_fn are	equal. The effects of invoking
       different
	  instances of type __iter_swap_fn on the same arguments  are  equiva-
       lent, 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::iter_swap 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::iter_swap above,	__iter_swap_fn models

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

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

Example
	   This	section	is incomplete
	   Reason: no example

See also
	  iter_swap  swaps  the	 objects pointed to by two adjusted underlying
       iterators
	  (C++20)   (function template)
	  iter_swap swaps the objects pointed to by two	underlying iterators
	  (C++20)   (function template)
	  iter_swap swaps the elements pointed to by two iterators
		    (function template)

Category:
	    * Todo no example

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

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

home | help