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

FreeBSD Manual Pages

  
 
  

home | help
std::variant::swap(3)	      C++ Standard Libary	 std::variant::swap(3)

NAME
       std::variant::swap - std::variant::swap

Synopsis
	  void	 swap(	 variant&   rhs	  )   noexcept(/*   see	  below	  */);
       (since C++17)
									  (un-
       til C++20)
	  constexpr void swap( variant&	 rhs  )	 noexcept(/*  see  below  */);
       (since C++20)

	  Swaps	two variant objects.

	    * if both *this and	rhs are	valueless by exception,	does nothing
	    *  otherwise,  if  both  *this  and	rhs hold the same alternative,
       calls
	      swap(std::get<i>(*this), std::get<i>(rhs)) where i  is  index().
       If an exception
	      is  thrown,  the	state  of  the values depends on the exception
       safety of the swap
	      function called.
	    * otherwise, exchanges values of rhs and *this. If an exception is
       thrown, the
	      state of *this and rhs depends on	exception safety of  variant's
       move
	      constructor.

	  The  behavior	 is undefined unless lvalues of	type T_i are Swappable
       and
	  std::is_move_constructible_v<T_i> is true for	all T_i	in Types....

Parameters
	  rhs -	a variant object to swap with

Return value
	  (none)

Exceptions
	  If this->index() == rhs.index(), may throw any exception thrown by
	  swap(std::get<i>(*this), std::get<i>(rhs)) with i being index().

	  Otherwise, may throw any exception thrown by the  move  constructors
       of the
	  alternatives currently held by *this and rhs.

	  noexcept specification:
	  noexcept(((std::is_nothrow_move_constructible_v<Types> &&
	  std::is_nothrow_swappable_v<Types>) && ...))

Example
       // Run this code

	#include <variant>
	#include <string>
	#include <iostream>

	int main()
	{
	    std::variant<int, std::string> v1{2}, v2{"abc"};
	    std::visit([] (auto&& x) { std::cout << x << ' '; }, v1);
	    std::visit([] (auto&& x) { std::cout << x << '\n'; }, v2);
	    v1.swap(v2);
	    std::visit([] (auto&& x) { std::cout << x << ' '; }, v1);
	    std::visit([] (auto&& x) { std::cout << x << '\n'; }, v2);
	}

Output:
	2 abc
	abc 2

	 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
	  P2231R1  C++20       swap  was  not  constexpr  while	 the  required
       made constexpr
			     operations	can be constexpr in C++20

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

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

home | help