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

From cppreference.com
< cpp‎ | experimental‎ | optional

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

std::swap(std::experimental::optional) | specializes the std::swap algorithm (function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/experimental/optional/swap&oldid=103288"