# std::optional<T>::swap

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

void swap( optional& other ) noexcept(/* see below */); |  | (since C++17)

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->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_v<T> &&
std::is_nothrow_swappable_v<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::optional) (C++17) | specializes the std::swap algorithm (function)

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