FreeBSD Manual Pages
std::expected::swap(3) C++ Standard Libary std::expected::swap(3) NAME std::expected::swap - std::expected::swap Synopsis constexpr void swap( expected& other ) noexcept(/*see below*/); (since C++23) Swaps the contents with those of other. * If both this->has_value() and other.has_value() are true: * If T is (possibly cv-qualified) void, no effects. * Otherwise, equivalent to using std::swap; swap(**this, *other);. * If both this->has_value() and other.has_value() are false, equivalent to using std::swap; swap(this->error(), other.error());. * If this->has_value() is false and other.has_value() is true, calls other.swap(*this). * If this->has_value() is true and other.has_value() is false, * If T is (possibly cv-qualified) void, let unex be the member that represents the unexpected value, equivalent to: std::construct_at(std::addressof(unex), std::move(other.unex)); std::destroy_at(std::addressof(other.unex)); * Otherwise, let val be the member that represents the expected value and unex be the member that represents the unexpected value, equivalent to: if constexpr (std::is_nothrow_move_constructible_v<E>) { E temp(std::move(other.unex)); std::destroy_at(std::addressof(other.unex)); try { std::construct_at(std::addressof(other.val), std::move(val)); std::destroy_at(std::addressof(val)); std::construct_at(std::addressof(unex), std::move(temp)); } catch(...) { std::construct_at(std::addressof(other.unex), std::move(temp)); throw; } } else { T temp(std::move(val)); std::destroy_at(std::addressof(val)); try { std::construct_at(std::addressof(unex), std::move(other.unex)); std::destroy_at(std::addressof(other.unex)); std::construct_at(std::addressof(other.val), std::move(temp)); } catch(...) { std::construct_at(std::addressof(val), std::move(temp)); throw; } } * In either case, if no exception was thrown, after swap, this->has_value() is false, and other.has_value() is true. This function participates in overload resolution only if * either T is (possibly cv-qualified) void, or std::is_swap- pable_v<T> is true, and * std::is_swappable_v<E> is true, and * either T is (possibly cv-qualified) void, or std::is_move_con- structible_v<T> is true, and * std::is_move_constructible_v<E> is true, and * at least one of the following is true: * T is (possibly cv-qualified) void * std::is_nothrow_move_constructible_v<T> * std::is_nothrow_move_constructible_v<E> Parameters other - the optional object to exchange the contents with Return value (none) Exceptions If T is (possibly cv-qualified) void, noexcept specification: noexcept( std::is_nothrow_move_constructible_v<E> && std::is_nothrow_swap- pable_v<E> ) Otherwise, noexcept specification: noexcept( std::is_nothrow_move_constructible_v<T> && std::is_nothrow_swap- pable_v<T> && std::is_nothrow_move_constructible_v<E> && std::is_nothrow_swap- pable_v<E> ) 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 or T's and E's move constructor, whichever is called. For both *this and other, if the object contained an expected value, it is left containing an expected value, and the other way round. Example This section is incomplete Reason: no example See also swap(std::expected) specializes the std::swap algorithm (C++23) (function) Categories: * conditionally noexcept * Todo no example http://cppreference.com 2024.06.10 std::expected::swap(3)
NAME | Synopsis | Parameters | Return value | Exceptions | Example | See also | Categories:
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::expected::swap&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
