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) |
|