49 : m_error(
other.m_error) {}
68 template<
typename... Args>
73 template<
typename U,
typename... Args>
88 m_error =
error.error();
95 m_error = util::move(
error).error();
99 constexpr explicit operator bool()
const {
return has_value(); }
100 constexpr auto has_value() const ->
bool {
return !m_error.has_value(); }
110 constexpr auto error() & -> E& {
return *m_error; }
111 constexpr auto error() const& -> E const& {
return *m_error; }
112 constexpr auto error() && -> E&& {
return *util::move(m_error); }
113 constexpr auto error() const&& -> E const&& {
return *util::move(m_error); }
122 template<
typename U,
typename G>
131 template<concepts::EqualityComparableWith<E> G>
133 if (a.has_value() != b.has_value()) {
136 return a.has_value() || a.error() == b.error();
139 template<concepts::EqualityComparableWith<E> G>
141 return !a && a.error() == b.error();
144 template<concepts::RemoveCVRefSameAs<Expected> Self,
typename F,
145 typename U = meta::UnwrapRefDecay<meta::InvokeResult<F>>>
159 template<concepts::RemoveCVRefSameAs<Expected> Self,
typename F,
typename R = meta::InvokeResult<F>>
168 template<concepts::RemoveCVRefSameAs<Expected> Self,
typename F,
169 typename R = meta::InvokeResult<F, meta::Like<Self, E>>>
178 template<concepts::RemoveCVRefSameAs<Expected> Self,
typename F,
179 typename G = meta::UnwrapRefDecay<meta::InvokeResult<F, meta::Like<Self, E>>>>
190 util::forward<Self>(self).
error()) };
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition monad_interface.h:15
constexpr Expected(types::InPlace)
Definition expected_void_value.h:66
constexpr friend auto tag_invoke(types::Tag< function::monad::fmap >, Self &&self, F &&function) -> Expected< U, E >
Definition expected_void_value.h:147
constexpr void operator*() const
Definition expected_void_value.h:104
constexpr friend auto operator==(Expected const &a, Expected< void, G > const &b) -> bool
Definition expected_void_value.h:132
friend class Expected
Definition expected_void_value.h:123
constexpr auto operator=(Expected const &) -> Expected &requires(!concepts::CopyConstructible< E >)=delete
E Error
Definition expected_void_value.h:29
constexpr auto error() const &-> E const &
Definition expected_void_value.h:111
constexpr friend void tag_invoke(types::Tag< util::swap >, Expected &a, Expected &b)
Definition expected_void_value.h:125
void Value
Definition expected_void_value.h:28
Unexpected< E > UnexpectedType
Definition expected_void_value.h:30
constexpr void value() const &
Definition expected_void_value.h:106
constexpr friend auto operator==(Expected const &a, Unexpected< G > const &b) -> bool
Definition expected_void_value.h:140
constexpr auto error() &-> E &
Definition expected_void_value.h:110
constexpr auto has_value() const -> bool
Definition expected_void_value.h:100
constexpr Expected(Expected &&)=default
constexpr Expected(types::Unexpect, std::initializer_list< U > list, Args &&... args)
Definition expected_void_value.h:75
constexpr Expected(Expected const &)=delete
constexpr auto operator=(Expected const &) -> Expected &requires(concepts::CopyConstructible< E >)=default
constexpr auto operator=(Expected &&) -> Expected &requires(concepts::MoveConstructible< E >)=default
constexpr friend auto tag_invoke(types::Tag< function::monad::fail >, Self &&self, F &&function) -> R
Definition expected_void_value.h:171
constexpr void emplace()
Definition expected_void_value.h:102
constexpr F const & other
Definition expected_void_value.h:52
constexpr Expected(Expected const &)=default
constexpr ~Expected()=default
constexpr void value() &&
Definition expected_void_value.h:108
constexpr Expected()=default
constexpr void __try_move_out() &&
Definition expected_void_value.h:119
constexpr Expected(types::Unexpect, Args &&... args)
Definition expected_void_value.h:70
constexpr auto __try_did_succeed() &&-> Expected
Definition expected_void_value.h:118
constexpr auto __try_did_fail() &&-> Unexpected< E >
Definition expected_void_value.h:115
constexpr friend auto tag_invoke(types::Tag< function::monad::fmap_right >, Self &&self, F &&function) -> Expected< void, G >
Definition expected_void_value.h:180
constexpr auto error() &&-> E &&
Definition expected_void_value.h:112
constexpr auto error() const &&-> E const &&
Definition expected_void_value.h:113
constexpr friend auto tag_invoke(types::Tag< function::monad::bind >, Self &&self, F &&function) -> R
Definition expected_void_value.h:161
Definition optional_forward_declaration.h:5
Definition unexpected.h:14
Definition operations.h:11
Definition operations.h:99
Definition operations.h:34
Definition operations.h:43
Definition expected_can_convert_constructor.h:9
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
constexpr auto unexpect
Definition unexpect.h:8
constexpr struct di::util::SwapFunction swap
constexpr auto in_place
Definition in_place.h:8