std::expected<T,E>::operator=
From cppreference.com
                    
                                        
                    
                    
                                                            
                    | constexpr expected& operator=( const expected& other ); | (1) | (since C++23) | 
| constexpr expected& operator=( expected&& other ) noexcept(/*see below*/); | (2) | (since C++23) | 
| template< class U = T > constexpr expected& operator=( U&& v ); | (3) | (since C++23) (T is not cv void) | 
| template< class G > constexpr expected& operator=( const unexpected<G>& other ); | (4) | (since C++23) | 
| template< class G > constexpr expected& operator=( unexpected<G>&& other ); | (5) | (since C++23) | 
Assigns a new value to an existing expected object.
1,2) Assigns the state of 
other.
-  If this->has_value()equals other.has_value(), assigns the value contained inother. Does nothing ifTis (possibly cv-qualified) void and other.has_value() is true.
-  Otherwise, destroys the currently contained value (does nothing if this->has_value() is true and Tis (possibly cv-qualified) void), and makes*thiscontain a copy of the value contained inother.
-  If other.has_value() is true and Tis (possibly cv-qualified) void, does not construct the new value. Otherwise, the new value is copy-constructed (1) or move-constructed (2) from*otherorother.error(), as appropriate. If an exception is thrown, the old value is retained; *this does not become valueless.
If no exception was thrown, after assignment, has_value() is equal to other.has_value().
-  Overload (1) is defined as deleted unless
-  either Tis (possibly cv-qualified) void or std::is_copy_assignable_v<T> is true, and
-  either Tis (possibly cv-qualified) void or std::is_copy_constructible_v<T> is true, and
- std::is_copy_assignable_v<E> is true, and
- std::is_copy_constructible_v<E> is true, and
-  at least one of the following is true:
-  Tis (possibly cv-qualified) void
- std::is_nothrow_move_constructible_v<T>
- std::is_nothrow_move_constructible_v<E>
 
-  
 
-  either 
-  Overload (2) participates in overload resolution only if
-  either Tis (possibly cv-qualified) void or std::is_move_assignable_v<T> is true, and
-  either Tis (possibly cv-qualified) void or std::is_move_constructible_v<T> is true, and
- std::is_move_assignable_v<E> is true, and
- std::is_move_constructible_v<E> is true, and
-  at least one of the following is true:
-  Tis (possibly cv-qualified) void
- std::is_nothrow_move_constructible_v<T>
- std::is_nothrow_move_constructible_v<E>
 
-  
 
-  either 
3) Assigns from expected value.
- If this->has_value() is true, equivalent to **this = std::forward<U>(v).
- Otherwise, destroys the value contained in *this, and makes *this contain a value initialized from std::forward<U>(v). If an exception is thrown, the old value is retained; *this does not become valueless.
If no exception was thrown, after assignment, this->has_value() is true.
-  This overload participates in overload resolution only if 
- std::is_same_v<expected, std::remove_cvref_t<U>> is false, and
-  std::remove_cvref_t<U> is not a specialization of std::unexpected, and
- std::is_constructible_v<T, U> is true, and
- std::is_assignable_v<T&, U> is true, and
- at least one of the following is true:
 
4,5) Assigns from unexpected value.
Let GF be const G& for overload (4), and G for overload (5).
-  If this->has_value() is true, destroys the value contained in *this (does nothing if Tis (possibly cv-qualified) void), and makes *this contain a value initialized from std::forward<GF>(e.error()). If an exception is thrown, the old value is retained; *this does not become valueless.
- Otherwise, equivalent to this->error() = std::forward<GF>(e.error()).
If no exception was thrown, after assignment, this->has_value() is false.
-  This overload participates in overload resolution only if 
- std::is_constructible_v<E, GF> is true, and
- std::is_assignable_v<E&, GF> is true, and
-  at least one of the following is true:
-  Tis (possibly cv-qualified) void
- std::is_nothrow_constructible_v<E, GF>
- std::is_nothrow_move_constructible_v<T>
- std::is_nothrow_move_constructible_v<E>
 
-  
 
In all cases, if T is not (possibly cv-qualified) void, the destruction of old value and construction of new value is performed as if by the following exposition-only function reinit_expected.
template< class NewType, class OldType, class... Args > constexpr void reinit_expected( NewType& new_val, OldType& old_val, Args&&... args ) { if constexpr (std::is_nothrow_constructible_v<NewType, Args...>) { std::destroy_at(std::addressof(old_val)); std::construct_at(std::addressof(new_val), std::forward<Args>(args)...); } else if constexpr (std::is_nothrow_move_constructible_v<NewType>) { NewType temp(std::forward<Args>(args)...); std::destroy_at(std::addressof(old_val)); std::construct_at(std::addressof(new_val), std::move(temp)); } else { OldType temp(std::move(old_val)); std::destroy_at(std::addressof(old_val)); try { std::construct_at(std::addressof(new_val), std::forward<Args>(args)...); } catch (...) { std::construct_at(std::addressof(old_val), std::move(temp)); throw; } } }
Parameters
| other | - | another expectedobject whose contained value to assign | 
| value | - | value to assign to the contained value | 
| e | - | std::unexpected object whose contained value to assign | 
Return value
*this
Exceptions
1) Throws any exception thrown by the copy constructor or copy assignment operator of 
T or E.2) If 
T is (possibly cv-qualified) void, noexcept specification:  
Otherwise, noexcept(std::is_nothrow_move_constructible_v<E> && std::is_nothrow_move_assignable_v<E>)
noexcept specification:  
noexcept(
  std::is_nothrow_move_constructible_v<T> && std::is_nothrow_move_assignable_v<T> &&
3) Throws any exception thrown by the constructor or assignment operator of 
T.4,5) Throws any exception thrown by the constructor or assignment operator of 
E.Example
| This section is incomplete Reason: no example | 
See also
| (C++23) | constructs the expected value in-place (public member function) |