##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::experimental::optional::swap

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

void swap( optional& other ); |  | (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`.

### [edit] Parameters

other | - | the `optional` object to exchange the contents with

### [edit] Return value

(none)

### [edit] Exceptions

`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 contained a value, it is left containing a value, and the other way round.

### [edit] See also

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

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

- conditionally noexcept

Hidden categories:

- Pages with unreviewed conditional noexcept template
- Pages with unreviewed noexcept template