std::experimental::optional::value_or
From cppreference.com
                    
                                        
                    < cpp | experimental | optional
                    
                                                            
                    | template< class U >  constexpr T value_or( U&& value ) const&; | (library fundamentals TS) | |
| template< class U >  T value_or( U&& value ) &&; | (library fundamentals TS) | |
Returns the contained value if *this is in engaged state, otherwise returns value.
| Contents | 
[edit] Parameters
| value | - | the value to exchange | 
| Type requirements | ||
| - Tmust meet the requirements ofCopyConstructiblein order to use overload (1). | ||
| - Tmust meet the requirements ofMoveConstructiblein order to use overload (2). | ||
| - U&&must be convertible toT | ||
[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) | |