[expected.void.swap] # 22 General utilities library [[utilities]](./#utilities) ## 22.8 Expected objects [[expected]](expected#void.swap) ### 22.8.7 Partial specialization of expected for void types [[expected.void]](expected.void#swap) #### 22.8.7.5 Swap [expected.void.swap] [🔗](#lib:swap,expected%3cvoid%3e) `constexpr void swap(expected& rhs) noexcept(see below); ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L9893) *Constraints*: is_swappable_v is true andis_move_constructible_v is true[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L9898) *Effects*: See Table [73](#tab:expected.void.swap "Table 73: swap(expected&) effects")[.](#2.sentence-1) Table [73](#tab:expected.void.swap) — swap(expected&) effects [[tab:expected.void.swap]](./tab:expected.void.swap) | [🔗](#tab:expected.void.swap-row-1) | **this->has_value()** | **!this->has_value()** | | --- | --- | --- | | [🔗](#tab:expected.void.swap-row-2)
**rhs.has_value()** | no effects | calls rhs.swap(*this) | | [🔗](#tab:expected.void.swap-row-3)
**!rhs.has_value()** | *see below* | equivalent to: using std​::​swap; swap(*unex*, rhs.*unex*); | For the case where rhs.has_value() is false andthis->has_value() is true, equivalent to:construct_at(addressof(*unex*), std::move(rhs.*unex*)); destroy_at(addressof(rhs.*unex*));*has_val* = false; rhs.*has_val* = true; [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L9923) *Throws*: Any exception thrown by the expressions in the *Effects*[.](#3.sentence-1) [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L9927) *Remarks*: The exception specification is equivalent tois_nothrow_move_constructible_v && is_nothrow_swappable_v[.](#4.sentence-1) [🔗](#lib:swap,expected%3cvoid%3e_) `friend constexpr void swap(expected& x, expected& y) noexcept(noexcept(x.swap(y))); ` [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L9939) *Effects*: Equivalent to x.swap(y)[.](#5.sentence-1)