std::optional::value_or
From cppreference.com
                    
                                        
                    
                    
                                                            
                    |   template< class U >  constexpr T value_or( U&& value ) const&;  | 
(since C++14) | |
|   template< class U >  T value_or( U&& value ) &&;  | 
(since C++14) | |
Returns the contained value if *this is in engaged state, otherwise returns value.
Contents | 
[edit] Parameters
| value | - | the value to exchange | 
| Type requirements | ||
 -T must meet the requirements of CopyConstructible in order to use overload (1).
 | ||
 -T must meet the requirements of MoveConstructible in order to use overload (2).
 | ||
 -U&& must be convertible to T
 | ||
[edit] Return value
The current value if *this is in engaged state, or value otherwise.
[edit] Exceptions
Any exception thrown by the selected constructor of T.
If an exception is thrown, the exception safety guarantee is as follows:
-  If *this was in engaged state, the contents of the contained value depend on the exception safety guarantee of 
T's constructor. -  Otherwise, the state of *this does not change. The contents of 
valuedepend on the exception safety guarantee ofT's constructor. 
[edit] See also
|    returns the contained value  (public member function)  | |