|
template<typename... Args, requires = (Constructible<T, Args...>())> |
T & | emplace (Args &&... args) noexcept(std::is_nothrow_constructible< T, Args... >::value) |
|
template<typename E , typename... Args, requires = (Constructible<T, std::initializer_list<E> &, Args &&...>())> |
T & | emplace (std::initializer_list< E > il, Args &&... args) noexcept(std::is_nothrow_constructible< T, std::initializer_list< E > &, Args... >::value) |
|
constexpr | operator bool () const noexcept |
|
optional & | operator= (nullopt_t) noexcept |
|
optional & | operator= (optional const &)=default |
|
optional & | operator= (optional &&)=default |
|
template<typename U = T, requires = (meta::and_< meta::bool_<!std::is_same<optional, detail::decay_t<U>>::value && !(std::is_scalar<T>::value && std::is_same<T, detail::decay_t<U>>::value)>, Constructible<T, U>, Assignable<T &, U>>::value)> |
optional & | operator= (U &&u) noexcept(std::is_nothrow_constructible< T, U >::value &&std::is_nothrow_assignable< T &, U >::value) |
|
template<typename U , requires = (meta::and_< ShouldConvertAssign<U>, Constructible<T, const U &>, Assignable<T &, const U &>>::value)> |
optional & | operator= (optional< U > const &that) |
|
template<typename U , requires = (meta::and_< ShouldConvertAssign<U>, Constructible<T, U>, Assignable<T &, U>>::value)> |
optional & | operator= (optional< U > &&that) |
|
constexpr | optional (nullopt_t) noexcept |
|
| optional (optional const &)=default |
|
| optional (optional &&)=default |
|
template<typename E , typename... Args, requires = (Constructible<T, std::initializer_list<E> &, Args...>())> |
constexpr | optional (in_place_t, std::initializer_list< E > il, Args &&... args) noexcept(std::is_nothrow_constructible< T, std::initializer_list< E > &, Args... >::value) |
|
template<typename U = T, requires = (meta::and_< meta::not_<Same<detail::decay_t<U>, in_place_t>>, meta::not_<Same<detail::decay_t<U>, optional>>, Constructible<T, U>, ConvertibleTo<U, T>>::value)> |
constexpr | optional (U &&v) |
|
template<typename U = T, requires = (meta::and_< meta::not_<Same<detail::decay_t<U>, in_place_t>>, meta::not_<Same<detail::decay_t<U>, optional>>, Constructible<T, U>, meta::not_<ConvertibleTo<U, T>>>::value)> |
constexpr | optional (U &&v) |
|
template<typename U , requires = (meta::and_< ShouldConvert<U>, Constructible<T, U const &>, ConvertibleTo<U const &, T>>::value)> |
| optional (optional< U > const &that) |
|
template<typename U , requires = (meta::and_< ShouldConvert<U>, Constructible<T, U const &>, meta::not_<ConvertibleTo<U const &, T>>>::value)> |
| optional (optional< U > const &that) |
|
template<typename U , requires = (meta::and_< ShouldConvert<U>, Constructible<T, U>, ConvertibleTo<U, T>>::value)> |
| optional (optional< U > &&that) |
|
template<typename U , requires = (meta::and_< ShouldConvert<U>, Constructible<T, U>, meta::not_<ConvertibleTo<U, T>>>::value)> |
| optional (optional< U > &&that) |
|
constexpr T const & | value () const & |
|
T & | value () & |
|
constexpr T const && | value () const && |
|
T && | value () && |
|
template<typename U , requires = (CopyConstructible<T>() && ConvertibleTo<U, T>())> |
constexpr T | value_or (U &&u) const & |
|
template<typename U , requires = (MoveConstructible<T>() && ConvertibleTo<U, T>())> |
T | value_or (U &&u) && |
|