template<typename T>
class vccc::optional< T >
See std::optional for more information
- Template Parameters
 - 
  
  
 
 | 
| constexpr  | operator bool () const noexcept | 
|   | 
| constexpr bool  | has_value () const noexcept | 
|   | 
| void  | swap (optional &other) noexcept(std::is_nothrow_move_constructible< value_type >::value &&vccc::is_nothrow_swappable< value_type >::value) | 
|   | 
 | 
| constexpr  | optional () noexcept=default | 
|   | 
| constexpr  | optional (nullopt_t) noexcept | 
|   | 
| constexpr  | optional (const optional &other)=default | 
|   | 
| constexpr  | optional (optional &&other)=default | 
|   | 
| template<typename U , std::enable_if_t< std::is_constructible< value_type, const U & >::value &&internal::optional::check_constructible< value_type, optional< U >>::value &&internal::optional::check_convertible< value_type, optional< U >>::value, int >  = 0>  | 
| constexpr  | optional (const optional< U > &other) | 
|   | 
| template<typename U , std::enable_if_t< std::is_constructible< value_type, const U & >::value &&internal::optional::check_constructible< value_type, optional< U >>::value &&internal::optional::check_convertible< value_type, optional< U >>::value &&!std::is_convertible< const U &, value_type >::value, int >  = 0>  | 
| constexpr  | optional (const optional< U > &other) | 
|   | 
| template<typename U , std::enable_if_t< std::is_constructible< value_type, U && >::value &&internal::optional::check_constructible< value_type, optional< U >>::value &&internal::optional::check_convertible< value_type, optional< U >>::value, int >  = 0>  | 
| constexpr  | optional (optional< U > &&other) | 
|   | 
| template<typename U , std::enable_if_t< std::is_constructible< value_type, U && >::value &&internal::optional::check_constructible< value_type, optional< U >>::value &&internal::optional::check_convertible< value_type, optional< U >>::value &&!std::is_convertible< U &&, value_type >::value, int >  = 0>  | 
| constexpr  | optional (optional< U > &&other) | 
|   | 
| template<typename InPlaceT , std::enable_if_t< std::is_same< InPlaceT, in_place_t >::value &&std::is_constructible< value_type >::value, int >  = 0>  | 
| constexpr  | optional (InPlaceT) | 
|   | 
| template<typename Arg , typename ... Args, std::enable_if_t< std::is_constructible< value_type, Arg, Args... >::value, int >  = 0>  | 
| constexpr  | optional (in_place_t, Arg &&arg, Args &&... args) | 
|   | 
| template<typename U , typename ... Args, std::enable_if_t< std::is_constructible< value_type, std::initializer_list< U > &, Args &&... >::value, int >  = 0>  | 
| constexpr  | optional (in_place_t, std::initializer_list< U > ilist, Args &&... args) | 
|   | 
| template<typename U  = value_type, std::enable_if_t< std::is_constructible< value_type, U && >::value &&std::is_convertible< U &&, value_type >::value &&!std::is_same< internal::optional::strip_t< U >, in_place_t >::value &&!std::is_same< internal::optional::strip_t< U >, optional< value_type >>::value, int >  = 0>  | 
| constexpr  | optional (U &&value) | 
|   | 
| template<typename U  = value_type, std::enable_if_t< std::is_constructible< value_type, U && >::value &&!std::is_convertible< U &&, value_type >::value &&!std::is_same< internal::optional::strip_t< U >, in_place_t >::value &&!std::is_same< internal::optional::strip_t< U >, optional< value_type >>::value, int >  = 0>  | 
| constexpr  | optional (U &&value) | 
|   | 
 | 
| optional &  | operator= (nullopt_t) noexcept | 
|   | 
| constexpr optional &  | operator= (optional const &)=default | 
|   | 
| constexpr optional &  | operator= (optional &&)=default | 
|   | 
| template<typename U , std::enable_if_t<(std::is_constructible< value_type, U >::value &&std::is_assignable< value_type &, U >::value &&!std::is_same< internal::optional::strip_t< U >, optional >::value) &&(!std::is_scalar< value_type >::value||!std::is_same< std::decay_t< U >, value_type >::value), int >  = 0>  | 
| optional &  | operator= (U &&value) | 
|   | 
| template<typename U , std::enable_if_t< internal::optional::check_constructible< value_type, optional< U >>::value &&internal::optional::check_convertible< value_type, optional< U >>::value &&internal::optional::check_assignable< value_type, optional< U >>::value &&std::is_constructible< value_type, const U & >::value &&std::is_assignable< value_type &, const U & >::value, int >  = 0>  | 
| optional &  | operator= (const optional< U > &other) | 
|   | 
| template<typename U , std::enable_if_t< internal::optional::check_constructible< value_type, optional< U >>::value &&internal::optional::check_convertible< value_type, optional< U >>::value &&internal::optional::check_assignable< value_type, optional< U >>::value &&std::is_constructible< value_type, U >::value &&std::is_assignable< value_type &, U >::value, int >  = 0>  | 
| optional &  | operator= (optional< U > &&other) | 
|   | 
 | 
| constexpr const value_type *  | operator-> () const noexcept | 
|   | 
| constexpr value_type *  | operator-> () noexcept | 
|   | 
 | 
| constexpr const value_type &  | operator* () const &noexcept | 
|   | 
| constexpr value_type &  | operator* () &noexcept | 
|   | 
| constexpr const value_type &&  | operator* () const &&noexcept | 
|   | 
| constexpr value_type &&  | operator* () &&noexcept | 
|   | 
 | 
| constexpr value_type &  | value () & | 
|   | 
| constexpr const value_type &  | value () const & | 
|   | 
| constexpr value_type &&  | value () && | 
|   | 
| constexpr const value_type &&  | value () const && | 
|   | 
 | 
| template<typename U >  | 
| constexpr value_type  | value_or (U &&default_value) const & | 
|   | 
| template<typename U >  | 
| constexpr value_type  | value_or (U &&default_value) && | 
|   | 
 | 
| template<typename F , std::enable_if_t< is_specialization< invoke_result_t< F, value_type & >, optional >::value, int >  = 0>  | 
| constexpr auto  | and_then (F &&f) & | 
|   | 
| template<typename F , std::enable_if_t< is_specialization< invoke_result_t< F, const value_type & >, optional >::value, int >  = 0>  | 
| constexpr auto  | and_then (F &&f) const & | 
|   | 
| template<typename F , std::enable_if_t< is_specialization< invoke_result_t< F, value_type && >, optional >::value, int >  = 0>  | 
| constexpr auto  | and_then (F &&f) && | 
|   | 
| template<typename F , std::enable_if_t< is_specialization< invoke_result_t< F, const value_type && >, optional >::value, int >  = 0>  | 
| constexpr auto  | and_then (F &&f) const && | 
|   | 
 | 
| template<typename F , std::enable_if_t< is_invocable< F, value_type & >::value, int >  = 0>  | 
| constexpr auto  | transform (F &&f) & | 
|   | 
| template<typename F , std::enable_if_t< is_invocable< F, const value_type & >::value, int >  = 0>  | 
| constexpr auto  | transform (F &&f) const & | 
|   | 
| template<typename F , std::enable_if_t< is_invocable< F, value_type & >::value, int >  = 0>  | 
| constexpr auto  | transform (F &&f) && | 
|   | 
| template<typename F , std::enable_if_t< is_invocable< F, value_type & >::value, int >  = 0>  | 
| constexpr auto  | transform (F &&f) const && | 
|   | 
 | 
| template<typename F , std::enable_if_t< conjunction< copy_constructible< T >, invocable< F > >::value, int >  = 0>  | 
| constexpr optional  | or_else (F &&f) const & | 
|   | 
| template<typename F , std::enable_if_t< conjunction< move_constructible< T >, invocable< F > >::value, int >  = 0>  | 
| constexpr optional  | or_else (F &&f) && | 
|   | 
 | 
| template<typename Dummy  = void, std::enable_if_t< std::is_same< Dummy, void >::value &&std::is_constructible< value_type >::value, int >  = 0>  | 
| value_type &  | emplace () | 
|   | 
| template<typename Arg , typename ... Args, std::enable_if_t< std::is_constructible< value_type, Arg, Args... >::value, int >  = 0>  | 
| value_type &  | emplace (Arg &&arg, Args &&... args) | 
|   | 
| template<typename U , typename ... Args, std::enable_if_t< std::is_constructible< value_type, std::initializer_list< U > &, Args &&... >::value, int >  = 0>  | 
| value_type &  | emplace (std::initializer_list< U > ilist, Args &&... args) | 
|   |