di 0.1.0
Loading...
Searching...
No Matches
di::vocab::Expected< T, E > Class Template Reference

#include <di/vocab/expected/expected.h>

Inheritance diagram for di::vocab::Expected< T, E >:
di::function::monad::MonadInterface< Expected< T, E > >

Public Types

using Value = T
 
using Error = E
 

Public Member Functions

constexpr Expected ()
 
constexpr Expected (Expected const &)=default
 
constexpr Expected (Expected &&)=default
 
constexpr Expected (Expected const &)=delete
 
constexpr Expected (Expected const &other)
 
constexpr Expected (Expected &&other)
 
template<typename U, typename G>
requires ((!concepts::SameAs<U, T> || !concepts::SameAs<G, E>) && concepts::ConstructibleFrom<T, U const&> && concepts::ConstructibleFrom<E, G const&> && concepts::detail::ExpectedCanConvertConstructor<T, E, U, G>)
constexpr explicit (!concepts::ConvertibleTo< U const &, T >||!concepts::ConvertibleTo< G const &, E >) Expected(Expected< U
 
template<typename U, typename G>
requires ((!concepts::SameAs<U, T> || !concepts::SameAs<G, E>) && concepts::ConstructibleFrom<T, U> && concepts::ConstructibleFrom<E, G> && concepts::detail::ExpectedCanConvertConstructor<T, E, U, G>)
constexpr explicit (!concepts::ConvertibleTo< U, T >||!concepts::ConvertibleTo< G, E >) Expected(Expected< U
 
template<typename U = T>
requires (!concepts::RemoveCVRefSameAs<U, types::InPlace> && !concepts::RemoveCVRefSameAs<U, Expected> && !concepts::Unexpected<U> && concepts::ConstructibleFrom<T, U>)
constexpr explicit (!detail::ConvertibleToWorkaround< Expected, U, T >) Expected(U &&value)
 
template<typename G>
requires (concepts::ConstructibleFrom<E, G const&>)
constexpr explicit (!concepts::ConvertibleTo< G const &, E >) Expected(Unexpected< G > const &error)
 
template<typename G>
requires (concepts::ConstructibleFrom<E, G>)
constexpr explicit (!concepts::ConvertibleTo< G, E >) Expected(Unexpected< G > &&error)
 
template<typename... Args>
requires (concepts::ConstructibleFrom<T, Args...>)
constexpr Expected (types::InPlace, Args &&... args)
 
template<typename U, typename... Args>
requires (concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>)
constexpr Expected (types::InPlace, std::initializer_list< U > list, Args &&... args)
 
template<typename... Args>
requires (concepts::ConstructibleFrom<E, Args...>)
constexpr Expected (types::Unexpect, Args &&... args)
 
template<typename U, typename... Args>
requires (concepts::ConstructibleFrom<E, std::initializer_list<U>, Args...>)
constexpr Expected (types::Unexpect, std::initializer_list< U > list, Args &&... args)
 
constexpr ~Expected ()=default
 
constexpr ~Expected ()
 
constexpr auto operator= (Expected const &other) -> Expected &requires(concepts::CopyConstructible< T > &&concepts::CopyConstructible< E >)
 
constexpr auto operator= (Expected &&other) -> Expected &requires(concepts::MoveConstructible< T > &&concepts::MoveConstructible< E >)
 
template<typename U = T>
requires (!concepts::RemoveCVRefSameAs<Expected, U> && !concepts::Unexpected<U> && concepts::ConstructibleFrom<T, U>)
constexpr auto operator= (U &&value) -> Expected &
 
template<typename G>
requires (concepts::ConstructibleFrom<E, G const&>)
constexpr auto operator= (Unexpected< G > const &error) -> Expected &
 
template<typename G>
requires (concepts::ConstructibleFrom<E, G>)
constexpr auto operator= (Unexpected< G > &&error) -> Expected &
 
constexpr auto operator-> ()
 
constexpr auto operator-> () const
 
constexpr auto operator* () &-> T &
 
constexpr auto operator* () const &-> T const &
 
constexpr auto operator* () &&-> T &&
 
constexpr auto operator* () const &&-> T const &&
 
constexpr operator bool () const
 
constexpr auto has_value () const -> bool
 
constexpr auto value () &-> T &
 
constexpr auto value () const &-> T const &
 
constexpr auto value () &&-> T &&
 
constexpr auto value () const &&-> T const &&
 
constexpr auto error () &-> E &
 
constexpr auto error () const &-> E const &
 
constexpr auto error () &&-> E &&
 
constexpr auto error () const &&-> E const &&
 
template<concepts::ConvertibleTo< T > U>
requires (concepts::CopyConstructible<T>)
constexpr auto value_or (U &&default_value) const &-> T
 
template<concepts::ConvertibleTo< T > U>
requires (concepts::MoveConstructible<T>)
constexpr auto value_or (U &&default_value) &&-> T
 
constexpr auto optional_value () const &-> Optional< T > requires(concepts::CopyConstructible< T >)
 
constexpr auto optional_value () &&-> Optional< T > requires(concepts::MoveConstructible< T >)
 
template<typename... Args>
requires (concepts::ConstructibleFrom<T, Args...>)
constexpr auto emplace (Args &&... args) -> T &
 
template<typename U, typename... Args>
requires (concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>)
constexpr auto emplace (std::initializer_list< U > list, Args &&... args) -> T &
 
constexpr auto __try_did_fail () &&-> Unexpected< E >
 
constexpr auto __try_did_succeed () &&-> Expected
 
constexpr auto __try_move_out () &&-> T &&
 
- Public Member Functions inherited from di::function::monad::MonadInterface< Expected< T, E > >
constexpr auto transform (F &&function) &-> decltype(auto)
 
constexpr auto transform (F &&function) const &-> decltype(auto)
 
constexpr auto transform (F &&function) &&-> decltype(auto)
 
constexpr auto transform (F &&function) const &&-> decltype(auto)
 
constexpr auto and_then (F &&function) &-> decltype(auto)
 
constexpr auto and_then (F &&function) const &-> decltype(auto)
 
constexpr auto and_then (F &&function) &&-> decltype(auto)
 
constexpr auto and_then (F &&function) const &&-> decltype(auto)
 
constexpr auto or_else (F &&function) &-> decltype(auto)
 
constexpr auto or_else (F &&function) const &-> decltype(auto)
 
constexpr auto or_else (F &&function) &&-> decltype(auto)
 
constexpr auto or_else (F &&function) const &&-> decltype(auto)
 
constexpr auto transform_error (F &&function) &-> decltype(auto)
 
constexpr auto transform_error (F &&function) const &-> decltype(auto)
 
constexpr auto transform_error (F &&function) &&-> decltype(auto)
 
constexpr auto transform_error (F &&function) const &&-> decltype(auto)
 

Public Attributes

constexpr G const & other
 
constexpr G && other
 

Friends

template<typename U, typename G>
class Expected
 
template<concepts::EqualityComparableWith< T > U, concepts::EqualityComparableWith< E > G>
constexpr friend auto operator== (Expected const &a, Expected< U, G > const &b) -> bool
 
template<typename U>
requires (meta::ExpectedRank<U> < meta::ExpectedRank<Expected> && concepts::EqualityComparableWith<T, U>)
constexpr friend auto operator== (Expected const &a, U const &b) -> bool
 
template<concepts::EqualityComparableWith< E > G>
constexpr friend auto operator== (Expected const &a, Unexpected< G > const &b) -> bool
 
template<concepts::RemoveCVRefSameAs< Expected > Self, typename F, typename U = meta::UnwrapRefDecay<meta::InvokeResult<F, meta::Like<Self, T>>>>
requires (concepts::ConstructibleFrom<E, meta::Like<Self, E>>)
constexpr friend auto tag_invoke (types::Tag< function::monad::fmap >, Self &&self, F &&function) -> Expected< U, E >
 
template<concepts::RemoveCVRefSameAs< Expected > Self, typename F, typename R = meta::InvokeResult<F, meta::Like<Self, T>>>
requires (concepts::Expected<R> && concepts::ConvertibleTo<meta::Like<Self, E>, meta::ExpectedError<R>>)
constexpr friend auto tag_invoke (types::Tag< function::monad::bind >, Self &&self, F &&function) -> R
 
template<concepts::RemoveCVRefSameAs< Expected > Self, typename F, typename R = meta::InvokeResult<F, meta::Like<Self, E>>>
requires (concepts::Expected<R> && concepts::ConvertibleTo<meta::Like<Self, T>, meta::ExpectedValue<R>>)
constexpr friend auto tag_invoke (types::Tag< function::monad::fail >, Self &&self, F &&function) -> R
 
template<concepts::RemoveCVRefSameAs< Expected > Self, typename F, typename G = meta::UnwrapRefDecay<meta::InvokeResult<F, meta::Like<Self, E>>>>
constexpr friend auto tag_invoke (types::Tag< function::monad::fmap_right >, Self &&self, F &&function) -> Expected< T, G >
 

Member Typedef Documentation

◆ Error

template<typename T, typename E>
using di::vocab::Expected< T, E >::Error = E

◆ Value

template<typename T, typename E>
using di::vocab::Expected< T, E >::Value = T

Constructor & Destructor Documentation

◆ Expected() [1/10]

template<typename T, typename E>
di::vocab::Expected< T, E >::Expected ( )
inlineconstexpr

◆ Expected() [2/10]

template<typename T, typename E>
di::vocab::Expected< T, E >::Expected ( Expected< T, E > const & )
constexprdefault

◆ Expected() [3/10]

template<typename T, typename E>
di::vocab::Expected< T, E >::Expected ( Expected< T, E > && )
constexprdefault

◆ Expected() [4/10]

template<typename T, typename E>
di::vocab::Expected< T, E >::Expected ( Expected< T, E > const & )
constexprdelete

◆ Expected() [5/10]

template<typename T, typename E>
di::vocab::Expected< T, E >::Expected ( Expected< T, E > const & other)
inlineconstexpr

◆ Expected() [6/10]

template<typename T, typename E>
di::vocab::Expected< T, E >::Expected ( Expected< T, E > && other)
inlineconstexpr

◆ Expected() [7/10]

template<typename T, typename E>
template<typename... Args>
requires (concepts::ConstructibleFrom<T, Args...>)
di::vocab::Expected< T, E >::Expected ( types::InPlace ,
Args &&... args )
inlineexplicitconstexpr

◆ Expected() [8/10]

template<typename T, typename E>
template<typename U, typename... Args>
requires (concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>)
di::vocab::Expected< T, E >::Expected ( types::InPlace ,
std::initializer_list< U > list,
Args &&... args )
inlineexplicitconstexpr

◆ Expected() [9/10]

template<typename T, typename E>
template<typename... Args>
requires (concepts::ConstructibleFrom<E, Args...>)
di::vocab::Expected< T, E >::Expected ( types::Unexpect ,
Args &&... args )
inlineexplicitconstexpr

◆ Expected() [10/10]

template<typename T, typename E>
template<typename U, typename... Args>
requires (concepts::ConstructibleFrom<E, std::initializer_list<U>, Args...>)
di::vocab::Expected< T, E >::Expected ( types::Unexpect ,
std::initializer_list< U > list,
Args &&... args )
inlineexplicitconstexpr

◆ ~Expected() [1/2]

template<typename T, typename E>
di::vocab::Expected< T, E >::~Expected ( )
constexprdefault

◆ ~Expected() [2/2]

template<typename T, typename E>
di::vocab::Expected< T, E >::~Expected ( )
inlineconstexpr

Member Function Documentation

◆ __try_did_fail()

template<typename T, typename E>
auto di::vocab::Expected< T, E >::__try_did_fail ( ) && -> Unexpected<E>
inlineconstexpr

◆ __try_did_succeed()

template<typename T, typename E>
auto di::vocab::Expected< T, E >::__try_did_succeed ( ) && -> Expected
inlineconstexpr

◆ __try_move_out()

template<typename T, typename E>
auto di::vocab::Expected< T, E >::__try_move_out ( ) && -> T&&
inlineconstexpr

◆ emplace() [1/2]

template<typename T, typename E>
template<typename... Args>
requires (concepts::ConstructibleFrom<T, Args...>)
auto di::vocab::Expected< T, E >::emplace ( Args &&... args) -> T&
inlineconstexpr

◆ emplace() [2/2]

template<typename T, typename E>
template<typename U, typename... Args>
requires (concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>)
auto di::vocab::Expected< T, E >::emplace ( std::initializer_list< U > list,
Args &&... args ) -> T&
inlineconstexpr

◆ error() [1/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::error ( ) && -> E&&
inlineconstexpr

◆ error() [2/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::error ( ) & -> E&
inlineconstexpr

◆ error() [3/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::error ( ) const && -> E const&&
inlineconstexpr

◆ error() [4/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::error ( ) const & -> E const&
inlineconstexpr

◆ explicit() [1/5]

template<typename T, typename E>
template<typename G>
requires (concepts::ConstructibleFrom<E, G const&>)
di::vocab::Expected< T, E >::explicit ( !concepts::ConvertibleTo< G const &, E > ) const &
inlineconstexpr

◆ explicit() [2/5]

template<typename T, typename E>
template<typename G>
requires (concepts::ConstructibleFrom<E, G>)
di::vocab::Expected< T, E >::explicit ( !concepts::ConvertibleTo< G, E > ) &&
inlineconstexpr

◆ explicit() [3/5]

template<typename T, typename E>
template<typename U, typename G>
requires ((!concepts::SameAs<U, T> || !concepts::SameAs<G, E>) && concepts::ConstructibleFrom<T, U const&> && concepts::ConstructibleFrom<E, G const&> && concepts::detail::ExpectedCanConvertConstructor<T, E, U, G>)
di::vocab::Expected< T, E >::explicit ( !concepts::ConvertibleTo< U const &, T >||!concepts::ConvertibleTo< G const &, E > )
constexpr

◆ explicit() [4/5]

template<typename T, typename E>
template<typename U, typename G>
requires ((!concepts::SameAs<U, T> || !concepts::SameAs<G, E>) && concepts::ConstructibleFrom<T, U> && concepts::ConstructibleFrom<E, G> && concepts::detail::ExpectedCanConvertConstructor<T, E, U, G>)
di::vocab::Expected< T, E >::explicit ( !concepts::ConvertibleTo< U, T >||!concepts::ConvertibleTo< G, E > )
constexpr

◆ explicit() [5/5]

template<typename T, typename E>
template<typename U = T>
requires (!concepts::RemoveCVRefSameAs<U, types::InPlace> && !concepts::RemoveCVRefSameAs<U, Expected> && !concepts::Unexpected<U> && concepts::ConstructibleFrom<T, U>)
di::vocab::Expected< T, E >::explicit ( !detail::ConvertibleToWorkaround< Expected< T, E >, U, T > ) &&
inlineconstexpr

◆ has_value()

template<typename T, typename E>
auto di::vocab::Expected< T, E >::has_value ( ) const -> bool
inlineconstexpr

◆ operator bool()

template<typename T, typename E>
di::vocab::Expected< T, E >::operator bool ( ) const
inlineexplicitconstexpr

◆ operator*() [1/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::operator* ( ) && -> T&&
inlineconstexpr

◆ operator*() [2/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::operator* ( ) & -> T&
inlineconstexpr

◆ operator*() [3/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::operator* ( ) const && -> T const&&
inlineconstexpr

◆ operator*() [4/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::operator* ( ) const & -> T const&
inlineconstexpr

◆ operator->() [1/2]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::operator-> ( )
inlineconstexpr

◆ operator->() [2/2]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::operator-> ( ) const
inlineconstexpr

◆ operator=() [1/5]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::operator= ( Expected< T, E > && other) -> Expected& requires(concepts::MoveConstructible<T> && concepts::MoveConstructible<E>)
inlineconstexpr

◆ operator=() [2/5]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::operator= ( Expected< T, E > const & other) -> Expected& requires(concepts::CopyConstructible<T> && concepts::CopyConstructible<E>)
inlineconstexpr

◆ operator=() [3/5]

template<typename T, typename E>
template<typename U = T>
requires (!concepts::RemoveCVRefSameAs<Expected, U> && !concepts::Unexpected<U> && concepts::ConstructibleFrom<T, U>)
auto di::vocab::Expected< T, E >::operator= ( U && value) -> Expected&
inlineconstexpr

◆ operator=() [4/5]

template<typename T, typename E>
template<typename G>
requires (concepts::ConstructibleFrom<E, G>)
auto di::vocab::Expected< T, E >::operator= ( Unexpected< G > && error) -> Expected&
inlineconstexpr

◆ operator=() [5/5]

template<typename T, typename E>
template<typename G>
requires (concepts::ConstructibleFrom<E, G const&>)
auto di::vocab::Expected< T, E >::operator= ( Unexpected< G > const & error) -> Expected&
inlineconstexpr

◆ optional_value() [1/2]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::optional_value ( ) && -> Optional<T> requires(concepts::MoveConstructible<T>)
inlineconstexpr

◆ optional_value() [2/2]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::optional_value ( ) const & -> Optional<T> requires(concepts::CopyConstructible<T>)
inlineconstexpr

◆ value() [1/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::value ( ) && -> T&&
inlineconstexpr

◆ value() [2/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::value ( ) & -> T&
inlineconstexpr

◆ value() [3/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::value ( ) const && -> T const&&
inlineconstexpr

◆ value() [4/4]

template<typename T, typename E>
auto di::vocab::Expected< T, E >::value ( ) const & -> T const&
inlineconstexpr

◆ value_or() [1/2]

template<typename T, typename E>
template<concepts::ConvertibleTo< T > U>
requires (concepts::MoveConstructible<T>)
auto di::vocab::Expected< T, E >::value_or ( U && default_value) && -> T
inlineconstexpr

◆ value_or() [2/2]

template<typename T, typename E>
template<concepts::ConvertibleTo< T > U>
requires (concepts::CopyConstructible<T>)
auto di::vocab::Expected< T, E >::value_or ( U && default_value) const & -> T
inlineconstexpr

Friends And Related Symbol Documentation

◆ Expected

template<typename T, typename E>
template<typename U, typename G>
friend class Expected
friend

◆ operator== [1/3]

template<typename T, typename E>
template<concepts::EqualityComparableWith< T > U, concepts::EqualityComparableWith< E > G>
friend auto operator== ( Expected< T, E > const & a,
Expected< U, G > const & b ) -> bool
friend

◆ operator== [2/3]

template<typename T, typename E>
template<typename U>
requires (meta::ExpectedRank<U> < meta::ExpectedRank<Expected> && concepts::EqualityComparableWith<T, U>)
friend auto operator== ( Expected< T, E > const & a,
U const & b ) -> bool
friend

◆ operator== [3/3]

template<typename T, typename E>
template<concepts::EqualityComparableWith< E > G>
friend auto operator== ( Expected< T, E > const & a,
Unexpected< G > const & b ) -> bool
friend

◆ tag_invoke [1/4]

template<typename T, typename E>
template<concepts::RemoveCVRefSameAs< Expected > Self, typename F, typename R = meta::InvokeResult<F, meta::Like<Self, T>>>
requires (concepts::Expected<R> && concepts::ConvertibleTo<meta::Like<Self, E>, meta::ExpectedError<R>>)
friend auto tag_invoke ( types::Tag< function::monad::bind > ,
Self && self,
F && function ) -> R
friend

◆ tag_invoke [2/4]

template<typename T, typename E>
template<concepts::RemoveCVRefSameAs< Expected > Self, typename F, typename R = meta::InvokeResult<F, meta::Like<Self, E>>>
requires (concepts::Expected<R> && concepts::ConvertibleTo<meta::Like<Self, T>, meta::ExpectedValue<R>>)
friend auto tag_invoke ( types::Tag< function::monad::fail > ,
Self && self,
F && function ) -> R
friend

◆ tag_invoke [3/4]

template<typename T, typename E>
template<concepts::RemoveCVRefSameAs< Expected > Self, typename F, typename U = meta::UnwrapRefDecay<meta::InvokeResult<F, meta::Like<Self, T>>>>
requires (concepts::ConstructibleFrom<E, meta::Like<Self, E>>)
friend auto tag_invoke ( types::Tag< function::monad::fmap > ,
Self && self,
F && function ) -> Expected<U, E>
friend

◆ tag_invoke [4/4]

template<typename T, typename E>
template<concepts::RemoveCVRefSameAs< Expected > Self, typename F, typename G = meta::UnwrapRefDecay<meta::InvokeResult<F, meta::Like<Self, E>>>>
friend auto tag_invoke ( types::Tag< function::monad::fmap_right > ,
Self && self,
F && function ) -> Expected<T, G>
friend

Member Data Documentation

◆ m_error

template<typename T, typename E>
util::RebindableBox<E> di::vocab::Expected< T, E >::m_error

◆ m_value

template<typename T, typename E>
util::RebindableBox<T> di::vocab::Expected< T, E >::m_value

◆ other [1/2]

template<typename T, typename E>
G const& di::vocab::Expected< T, E >::other
Initial value:
{
internal_construct_from_expected(other)
constexpr G const & other
Definition expected.h:67

◆ other [2/2]

template<typename T, typename E>
G&& di::vocab::Expected< T, E >::other
Initial value:
{
internal_construct_from_expected(util::move(other))

The documentation for this class was generated from the following file: