FreeBSD Manual Pages
std::optional::swap(3) C++ Standard Libary std::optional::swap(3) NAME std::optional::swap - std::optional::swap Synopsis void swap( optional& other ) noexcept(/* see below */); (since C++17) (un- til C++20) constexpr void swap( optional& other ) noexcept(/* see below */); (since C++20) 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. The program is ill-formed if std::is_move_constructible_v<T> is false. 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. Example // Run this code #include <iostream> #include <string> #include <optional> int main() { std::optional<std::string> opt1("First example text"); std::optional<std::string> opt2("2nd text"); enum Swap { Before, After }; auto print_opts = [&](Swap e) { std::cout << (e == Before ? "Before swap:\n" : "After swap:\n"); std::cout << "opt1 contains '" << opt1.value_or("") << "'\n"; std::cout << "opt2 contains '" << opt2.value_or("") << "'\n"; std::cout << (e == Before ? "---SWAP---\n": "\n"); }; print_opts(Before); opt1.swap(opt2); print_opts(After); // Swap with only 1 set opt1 = "Lorem ipsum dolor sit amet, consectetur tincidunt."; opt2.reset(); print_opts(Before); opt1.swap(opt2); print_opts(After); } Output: Before swap: opt1 contains 'First example text' opt2 contains '2nd text' ---SWAP--- After swap: opt1 contains '2nd text' opt2 contains 'First example text' Before swap: opt1 contains 'Lorem ipsum dolor sit amet, consectetur tincidunt.' opt2 contains '' ---SWAP--- After swap: opt1 contains '' opt2 contains 'Lorem ipsum dolor sit amet, consectetur tincidunt.' Defect reports The following behavior-changing defect reports were applied retroac- tively to previously published C++ standards. DR Applied to Behavior as published Correct behavior P2231R1 C++20 swap was not constexpr while the required made constexpr operations can be constexpr in C++20 See also std::swap(std::optional) specializes the std::swap algorithm (C++17) (function template) http://cppreference.com 2022.07.31 std::optional::swap(3)
NAME | Synopsis | Parameters | Return value | Exceptions | Example | Output: | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::optional::swap&sektion=3&manpath=FreeBSD+Ports+15.0>
