< cpp‎ | experimental‎ | optional
Revision as of 18:39, 16 March 2014 by P12bot (Talk | contribs)

Technical specifications
Filesystem library (filesystem TS)
Library fundamentals (library fundamentals TS)
Library fundamentals 2 (library fundamentals 2 TS)
Extensions for parallelism (parallelism TS)
Concepts (concepts TS)
Extensions for concurrency (concurrency TS)
Special mathematical functions (special math TR)
void swap( optional& other );
(library fundamentals TS)

Swaps the contents with those of other.

  • If none of *this and other are in engaged states, the function has no effect.
  • If only one of *this and other is in engaged state (let's call this object in and the other un), the contained value of un is initialized by moving the contained value of in, followed by destruction of the contained value of in. in is in disengaged state and un is in engaged state afterwards.
  • If both *this and other have engaged states, the contained values are exchanged by calling swap(**this, *other).



other - the optional object to exchange the contents with

Return value



noexcept specification:  
noexcept(is_nothrow_move_constructible<T>::value &&
           noexcept(swap(declval<T&>(), 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 was in engaged state, it is left in engaged state, and the other way round.

See also

specializes the std::swap algorithm
(function) [edit]