operator=(std::optional)
From cppreference.com
                    
                                        
                    
                    
                                                            
                    |   Defined in header <optional>
   | 
||
|   Compare two  optional objects | 
||
|   template< class T >  constexpr bool operator==( const optional<T>& lhs, const optional<T>& rhs );  | 
(1) | (since C++14) | 
|   template< class T >  constexpr bool operator<( const optional<T>& lhs, const optional<T>& rhs );  | 
(2) | (since C++14) | 
|   Compare an  optional object with a nullopt | 
||
|   template< class T >  constexpr bool operator==( const optional<T>& opt, std::nullopt_t );  | 
(3) | (since C++14) | 
|   template< class T >  constexpr bool operator==( std::nullopt_t, const optional<T>& opt );  | 
(4) | (since C++14) | 
|   template< class T >  constexpr bool operator<( const optional<T>& opt, std::nullopt_t );  | 
(5) | (since C++14) | 
|   template< class T >  constexpr bool operator<( std::nullopt_t, const optional<T>& opt);  | 
(6) | (since C++14) | 
|   Compare an  optional object with a T | 
||
|   template< class T >  constexpr bool operator==( const optional<T>& opt, const T& v );  | 
(7) | (since C++14) | 
|   template< class T >  constexpr bool operator==( const T& value, const optional<T>& opt );  | 
(8) | (since C++14) | 
|   template< class T >  constexpr bool operator<( const optional<T>& opt, const T& v );  | 
(9) | (since C++14) | 
Performs comparison operations on optional objects.
1-2) Compares two 
optional objects, lhs and rhs. The contained values are compared only if both lhs and rhs are in engaged states. Otherwise, lhsis considered equal torhsif, and only if, bothlhsandrhsare in disengaged states.lhsis considered less thanrhsif, and only if,rhsis in engaged state andlhsis not.
3-6) Compares 
opt with a nullopt. Equivalent to (1-2) when comparing to an optional with engaged state.7-9) Compares 
opt with a value. The values are compared only if opt is in engaged state. Otherwise, opt is considered less than value.[edit] Parameters
| lhs, rhs, opt | - |   an optional object to compare
 | 
| value | - | value to compare to the contained value | 
| Type requirements | ||
 -T must meet the requirements of EqualityComparable in order to use overloads (1, 7-8).
 | ||
[edit] Return value
1) If bool(lhs) != bool(rhs), returns false
 Otherwise, if bool(lhs) == bool(rhs) == false, returns true
 Otherwise, returns *lhs == *rhs.
2) If bool(rhs) == false returns false
 Otherwise, if lhs == false, returns true
 Otherwise returns std::less<T>{}(*x, *y)
3) Returns !opt.
4) Returns false.
5) Returns !opt.
6) Returns bool(opt)
7-8) Returns bool(opt) ? *opt == value : false.
9) Returns bool(opt) ? std::less<T>{}(*opt, value) : true.
[edit] Exceptions
1-2) (none)
3-6) 
7-9) (none)