std::experimental::optional<T>:: swap

From cppreference.com
void swap ( optional & other ) noexcept ( /* see below */ ) ;
(library fundamentals TS)

Swaps the contents with those of other .

  • If neither * this nor other contain a value, the function has no effect.
  • If only one of * this and other contains a value (let's call this object in and the other un ), the contained value of un is direct-initialized from std :: move ( * in ) , followed by destruction of the contained value of in as if by in. val - > T :: ~T ( ) . After this call, in does not contain a value un contains a value.
  • If both * this and other contain values, the contained values are exchanged by calling using std:: swap ; swap ( ** this, * other ) . T lvalues must satisfy Swappable .

Parameters

other - the optional object to exchange the contents with

Return value

(none)

Exceptions

noexcept specification:
noexcept ( std:: is_nothrow_move_constructible < T > :: value &&
noexcept ( swap ( std:: declval < T & > ( ) , std:: declval < T & > ( ) ) ) )

In the case of thrown exception, the states of the contained values of * this and other are determined by the exception safety guarantees of swap of type T or T 's move constructor, whichever is called. For both * this and other , if the object contained a value, it is left containing a value, and the other way round.

See also

specializes the std::swap algorithm
(function)