| 
| constexpr  | optional () noexcept=default | 
|   | 
| constexpr  | optional (nullopt_t) noexcept | 
|   | 
|   | optional (const optional &rhs)=default | 
|   | 
|   | optional (optional &&rhs)=default | 
|   | 
| template<typename U  = T, typename std::enable_if< std::is_constructible< T, U && >::value &&!std::is_same< typename std::decay< U >::type, in_place_t >::value &&!std::is_same< typename std::decay< U >::type, optional< T > >::value &&std::is_convertible< U &&, T > ::value, bool >::type  = false>  | 
| constexpr  | optional (U &&u) | 
|   | 
| template<typename U  = T, typename std::enable_if< std::is_constructible< T, U && >::value &&!std::is_same< typename std::decay< U >::type, in_place_t >::value &&!std::is_same< typename std::decay< U >::type, optional< T > >::value &&!std::is_convertible< U &&, T > ::value, bool >::type  = false>  | 
| constexpr  | optional (U &&u) | 
|   | 
| template<class... Args>  | 
| constexpr  | optional (in_place_t, Args &&... args) | 
|   | 
| template<class U , class... Args, typename std::enable_if< std::is_constructible< T, std::initializer_list< U > > ::value, bool >::type  = false>  | 
| constexpr  | optional (in_place_t, std::initializer_list< U > il, Args &&... args) | 
|   | 
|   | ~optional ()=default | 
|   | 
| optional &  | operator= (nullopt_t) noexcept | 
|   | 
| optional &  | operator= (const optional &rhs)=default | 
|   | 
| optional &  | operator= (optional &&rhs)=default | 
|   | 
| template<class U  = T>  | 
| auto  | operator= (U &&v) -> typename std::enable_if< std::is_constructible< T, U >::value &&!std::is_same< typename std::decay< U >::type, optional< T > >::value &&(std::is_scalar< T >::value||std::is_same< typename std::decay< U >::type, T >::value) &&std::is_assignable< T &, U >::value, optional & >::type | 
|   | 
| template<class... Args>  | 
| void  | emplace (Args &&... args) | 
|   | 
| template<class U , class... Args>  | 
| void  | emplace (std::initializer_list< U > il, Args &&... args) | 
|   | 
| void  | swap (optional< T > &rhs) noexcept(std::is_nothrow_move_constructible< T >::value &&noexcept(std::swap(std::declval< T & >(), std::declval< T & >()))) | 
|   | 
| constexpr  | operator bool () const noexcept | 
|   | 
| constexpr bool  | has_value () const noexcept | 
|   | 
| constexpr T const *  | operator-> () const | 
|   | 
| constexpr T *  | operator-> () | 
|   | 
| constexpr T const &  | operator* () const & | 
|   | 
| constexpr T &  | operator* () & | 
|   | 
| constexpr T &&  | operator* () && | 
|   | 
| constexpr T const &  | value () const & | 
|   | 
| constexpr T &  | value () & | 
|   | 
| constexpr T &&  | value () && | 
|   | 
| template<class V >  | 
| constexpr T  | value_or (V &&v) const & | 
|   | 
| template<class V >  | 
| constexpr T  | value_or (V &&v) && | 
|   | 
| void  | reset () noexcept | 
|   |