43 constexpr auto has_value() const ->
bool {
return m_has_value; }
44 constexpr explicit operator bool()
const {
return has_value(); }
51 constexpr void reset() { m_has_value =
false; }
53 constexpr void emplace() { m_has_value =
true; }
57 return a.has_value() == b.has_value();
63 return a.has_value() <=> b.has_value();
65 constexpr friend auto operator<=>(
Optional const& a,
bool b) -> strong_ordering {
return bool(a) <=> b; }
68 template<concepts::DecaySameAs<Optional> Self,
typename F,
typename R = meta::InvokeResult<F>>
71 if (self.has_value()) {
77 template<concepts::DecaySameAs<Optional> Self,
typename F,
typename U = meta::UnwrapRefDecay<meta::InvokeResult<F>>>
79 if (self.has_value()) {
91 template<concepts::DecaySameAs<Optional> Self, concepts::InvocableTo<Optional> F>
93 return self.has_value() ? util::forward<Self>(self) :
function::invoke(util::forward<F>(f));
96 bool m_has_value {
false };
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition monad_interface.h:15
constexpr Optional(InPlace)
Definition optional_void.h:25
constexpr friend auto operator<=>(Optional const &a, NullOpt) -> strong_ordering
Definition optional_void.h:66
constexpr friend auto operator==(Optional const &a, NullOpt) -> bool
Definition optional_void.h:60
constexpr friend auto tag_invoke(types::Tag< function::monad::fail >, Self &&self, F &&f) -> Optional
Definition optional_void.h:92
constexpr friend auto operator<=>(Optional const &a, Optional const &b) -> strong_ordering
Definition optional_void.h:62
constexpr void emplace()
Definition optional_void.h:53
constexpr auto has_value() const -> bool
Definition optional_void.h:43
constexpr void reset()
Definition optional_void.h:51
constexpr friend auto tag_invoke(types::Tag< function::monad::bind >, Self &&self, F &&f) -> R
Definition optional_void.h:70
constexpr friend auto operator<=>(Optional const &a, bool b) -> strong_ordering
Definition optional_void.h:65
constexpr auto operator=(bool value) -> Optional &
Definition optional_void.h:38
constexpr friend auto tag_invoke(types::Tag< function::monad::fmap >, Self &&self, F &&f) -> Optional< U >
Definition optional_void.h:78
constexpr friend auto operator==(Optional const &a, bool b) -> bool
Definition optional_void.h:59
constexpr friend auto operator==(Optional const &a, Optional const &b) -> bool
Definition optional_void.h:56
constexpr Optional(bool value)
Definition optional_void.h:26
constexpr Optional(Optional const &)=default
constexpr Optional(Optional &&)=default
constexpr auto operator=(Optional &&) -> Optional &=default
constexpr void operator*() const
Definition optional_void.h:46
void Value
Definition optional_void.h:17
constexpr auto operator=(Optional const &) -> Optional &=default
constexpr ~Optional()=default
constexpr void value() const &
Definition optional_void.h:48
constexpr Optional()=default
constexpr Optional(NullOpt)
Definition optional_void.h:20
constexpr auto operator=(NullOpt) -> Optional &
Definition optional_void.h:33
constexpr void value() &&
Definition optional_void.h:49
constexpr auto invoke
Definition invoke.h:100
constexpr auto in_place
Definition in_place.h:8
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Optional(T) -> Optional< T >
constexpr auto nullopt
Definition nullopt.h:15