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

FreeBSD Manual Pages

  
 
  

home | help
std::experi...ranges::swap(3) C++ Standard Libarystd::experi...ranges::swap(3)

NAME
       std::experimental::ranges::swap - std::experimental::ranges::swap

Synopsis
	  Defined in header <experimental/ranges/utility>
	  namespace {
								 (ranges TS)
	  constexpr  /*	 unspecified */	swap = /* unspecified */;  (customiza-
       tion point object)

	  }
	  Call signature
	  template< class T, class U >

	  requires /* see below	*/

	  void swap(T&&	t, U&& u) noexcept(/* see below	*/);

	  Exchanges the	values referenced by t and u.

	  A call to ranges::swap is equivalent to:

	  1) (void)swap(std::forward<T>(t), std::forward<U>(u)), if  that  ex-
       pression	is valid,
	  where	the overload resolution	is performed with the following	candi-
       dates:

	    * template<class T>	void swap(T&, T&) = delete;
	    *  template<class  T, std::size_t N> void swap(T(&)[N], T(&)[N]) =
       delete;
	    * any declarations of swap found by	argument-dependent lookup.

	  If the function selected by overload resolution  does	 not  exchange
       the values
	  referenced  by t and u, the program is ill-formed; no	diagnostic re-
       quired.
	  2) Otherwise,	(void)ranges::swap_ranges(t, u), if T and U are	lvalue
       references to
	  array	types of equal extent (but possibly different  element	types)
       and
	  ranges::swap(*t, *u) is a valid expression;
	  3)  Otherwise, if T and U are	both V&	for some type V	that meets the
       syntactic
	  requirements of  MoveConstructible<V>	 and  Assignable<V&,  V>,  ex-
       changes the referenced
	  values   as	if  by	V  v{std::move(t)};  t	=  std::move(u);  u  =
       std::move(v);. If the
	  semantic requirements	of either concept are not satisfied, the  pro-
       gram is
	  ill-formed; no diagnostic required.
	  4) In	all other cases, a call	to ranges::swap	is ill-formed.

	  ranges::swap	can be used in a constant expression if	every function
       it calls	(as
	  specified above) can be so used.

	 Customization point objects

	  The name ranges::swap	denotes	a customization	point object, which is
       a function
	  object of a literal Semiregular class	type (denoted, for  exposition
       purposes, as
	  SwapT).  All instances of SwapT are equal. Thus, ranges::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::swap above, SwapT will satisfy ranges::Invoca-
       ble<const SwapT,
	  Args...>. Otherwise, no function call	operator of SwapT participates
       in overload
	  resolution.

	  In every translation unit  in	 which	ranges::swap  is  defined,  it
       refers to the same
	  instance  of the customization point object. (This means that	it can
       be used freely
	  in things like inline	functions and function templates without  vio-
       lating the
	  one-definition rule.)

Exceptions
	  1)
	  noexcept specification:
	  noexcept(noexcept((void)swap(std::forward<T>(t),	     std::for-
       ward<T>(u))))
	  , where swap is found	as described above.
	  2)
	  noexcept specification:
	  noexcept(noexcept(ranges::swap(*t, *u)))
	  3)
	  noexcept specification:
	  noexcept(std::is_nothrow_move_constructible<V>::value	&&
	  std::is_nothrow_move_assignable<V>::value)

Example
	   This	section	is incomplete
	   Reason: no example

See also
	  swap swaps the values	of two objects
	       (function template)

http://cppreference.com		  2022.07.31	 std::experi...ranges::swap(3)

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

home | help