![]() |
ImFusion SDK 4.3
|
#include <ImFusion/Core/Utils/Expected.h>
An Expected<T, E>
object is an object that contains the storage for another object and manages the lifetime of this contained object T
.
More...
An Expected<T, E>
object is an object that contains the storage for another object and manages the lifetime of this contained object T
.
Alternatively it could contain the storage for another unexpected object E
. The contained object may not be initialized after the Expected object has been initialized, and may not be destroyed before the Expected object has been destroyed. The initialization state of the contained object is tracked by the Expected object.
Public Types | |
typedef T | value_type |
typedef E | error_type |
typedef Unexpected< E > | unexpected_type |
Public Member Functions | |
template<class F> | |
UTILS_EXPECTED_11_CONSTEXPR auto | and_then (F &&f) &-> decltype(and_then_impl(std::declval< Expected & >(), std::forward< F >(f))) |
template<class F> | |
UTILS_EXPECTED_11_CONSTEXPR auto | and_then (F &&f) &&-> decltype(and_then_impl(std::declval< Expected && >(), std::forward< F >(f))) |
template<class F> | |
constexpr auto | and_then (F &&f) const &-> decltype(and_then_impl(std::declval< Expected const & >(), std::forward< F >(f))) |
template<class F> | |
constexpr auto | and_then (F &&f) const &&-> decltype(and_then_impl(std::declval< Expected const && >(), std::forward< F >(f))) |
template<class F> | |
UTILS_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval< Expected & >(), std::declval< F && >())) | map (F &&f) & |
template<class F> | |
UTILS_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval< Expected >(), std::declval< F && >())) | map (F &&f) && |
template<class F> | |
constexpr decltype(expected_map_impl(std::declval< const Expected & >(), std::declval< F && >())) | map (F &&f) const & |
template<class F> | |
constexpr decltype(expected_map_impl(std::declval< const Expected && >(), std::declval< F && >())) | map (F &&f) const && |
template<class F> | |
UTILS_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval< Expected & >(), std::declval< F && >())) | transform (F &&f) & |
template<class F> | |
UTILS_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval< Expected >(), std::declval< F && >())) | transform (F &&f) && |
template<class F> | |
constexpr decltype(expected_map_impl(std::declval< const Expected & >(), std::declval< F && >())) | transform (F &&f) const & |
template<class F> | |
constexpr decltype(expected_map_impl(std::declval< const Expected && >(), std::declval< F && >())) | transform (F &&f) const && |
template<class F> | |
UTILS_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval< Expected & >(), std::declval< F && >())) | map_error (F &&f) & |
template<class F> | |
UTILS_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval< Expected && >(), std::declval< F && >())) | map_error (F &&f) && |
template<class F> | |
constexpr decltype(map_error_impl(std::declval< const Expected & >(), std::declval< F && >())) | map_error (F &&f) const & |
template<class F> | |
constexpr decltype(map_error_impl(std::declval< const Expected && >(), std::declval< F && >())) | map_error (F &&f) const && |
template<class F> | |
UTILS_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval< Expected & >(), std::declval< F && >())) | transform_error (F &&f) & |
template<class F> | |
UTILS_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval< Expected && >(), std::declval< F && >())) | transform_error (F &&f) && |
template<class F> | |
constexpr decltype(map_error_impl(std::declval< const Expected & >(), std::declval< F && >())) | transform_error (F &&f) const & |
template<class F> | |
constexpr decltype(map_error_impl(std::declval< const Expected && >(), std::declval< F && >())) | transform_error (F &&f) const && |
template<class F> | |
Expected UTILS_EXPECTED_11_CONSTEXPR | or_else (F &&f) & |
template<class F> | |
Expected UTILS_EXPECTED_11_CONSTEXPR | or_else (F &&f) && |
template<class F> | |
Expected constexpr | or_else (F &&f) const & |
template<class F> | |
Expected constexpr | or_else (F &&f) const && |
constexpr | Expected (const Expected &rhs)=default |
constexpr | Expected (Expected &&rhs)=default |
Expected & | operator= (const Expected &rhs)=default |
Expected & | operator= (Expected &&rhs)=default |
template<class... Args, detail::enable_if_t< std::is_constructible< T, Args &&... >::value > * = nullptr> | |
constexpr | Expected (in_place_t, Args &&... args) |
template<class U, class... Args, detail::enable_if_t< std::is_constructible< T, std::initializer_list< U > &, Args &&... >::value > * = nullptr> | |
constexpr | Expected (in_place_t, std::initializer_list< U > il, Args &&... args) |
template<class G = E, detail::enable_if_t< std::is_constructible< E, const G & >::value > * = nullptr, detail::enable_if_t<!std::is_convertible< const G &, E >::value > * = nullptr> | |
constexpr | Expected (const Unexpected< G > &e) |
template<class G = E, detail::enable_if_t< std::is_constructible< E, const G & >::value > * = nullptr, detail::enable_if_t< std::is_convertible< const G &, E >::value > * = nullptr> | |
constexpr | Expected (Unexpected< G > const &e) |
template<class G = E, detail::enable_if_t< std::is_constructible< E, G && >::value > * = nullptr, detail::enable_if_t<!std::is_convertible< G &&, E >::value > * = nullptr> | |
constexpr | Expected (Unexpected< G > &&e) noexcept(std::is_nothrow_constructible< E, G && >::value) |
template<class G = E, detail::enable_if_t< std::is_constructible< E, G && >::value > * = nullptr, detail::enable_if_t< std::is_convertible< G &&, E >::value > * = nullptr> | |
constexpr | Expected (Unexpected< G > &&e) noexcept(std::is_nothrow_constructible< E, G && >::value) |
template<class... Args, detail::enable_if_t< std::is_constructible< E, Args &&... >::value > * = nullptr> | |
constexpr | Expected (Unexpect_t, Args &&... args) |
template<class U, class... Args, detail::enable_if_t< std::is_constructible< E, std::initializer_list< U > &, Args &&... >::value > * = nullptr> | |
constexpr | Expected (Unexpect_t, std::initializer_list< U > il, Args &&... args) |
template<class U, class G, detail::enable_if_t<!(std::is_convertible< U const &, T >::value &&std::is_convertible< G const &, E >::value)> * = nullptr, detail::expected_enable_from_other< T, E, U, G, const U &, const G & > * = nullptr> | |
UTILS_EXPECTED_11_CONSTEXPR | Expected (const Expected< U, G > &rhs) |
template<class U, class G, detail::enable_if_t<(std::is_convertible< U const &, T >::value &&std::is_convertible< G const &, E >::value)> * = nullptr, detail::expected_enable_from_other< T, E, U, G, const U &, const G & > * = nullptr> | |
UTILS_EXPECTED_11_CONSTEXPR | Expected (const Expected< U, G > &rhs) |
template<class U, class G, detail::enable_if_t<!(std::is_convertible< U &&, T >::value &&std::is_convertible< G &&, E >::value)> * = nullptr, detail::expected_enable_from_other< T, E, U, G, U &&, G && > * = nullptr> | |
UTILS_EXPECTED_11_CONSTEXPR | Expected (Expected< U, G > &&rhs) |
template<class U, class G, detail::enable_if_t<(std::is_convertible< U &&, T >::value &&std::is_convertible< G &&, E >::value)> * = nullptr, detail::expected_enable_from_other< T, E, U, G, U &&, G && > * = nullptr> | |
UTILS_EXPECTED_11_CONSTEXPR | Expected (Expected< U, G > &&rhs) |
template<class U = T, detail::enable_if_t<!std::is_convertible< U &&, T >::value > * = nullptr, detail::expected_enable_forward_value< T, E, U > * = nullptr> | |
UTILS_EXPECTED_MSVC2015_CONSTEXPR | Expected (U &&v) |
template<class U = T, detail::enable_if_t< std::is_convertible< U &&, T >::value > * = nullptr, detail::expected_enable_forward_value< T, E, U > * = nullptr> | |
UTILS_EXPECTED_MSVC2015_CONSTEXPR | Expected (U &&v) |
template<class U = T, class G = T, detail::enable_if_t< std::is_nothrow_constructible< T, U && >::value > * = nullptr, detail::enable_if_t<!std::is_void< G >::value > * = nullptr, detail::enable_if_t<(!std::is_same< Expected< T, E >, detail::decay_t< U > >::value &&!detail::conjunction< std::is_scalar< T >, std::is_same< T, detail::decay_t< U > > >::value &&std::is_constructible< T, U >::value &&std::is_assignable< G &, U >::value &&std::is_nothrow_move_constructible< E >::value)> * = nullptr> | |
Expected & | operator= (U &&v) |
template<class U = T, class G = T, detail::enable_if_t<!std::is_nothrow_constructible< T, U && >::value > * = nullptr, detail::enable_if_t<!std::is_void< U >::value > * = nullptr, detail::enable_if_t<(!std::is_same< Expected< T, E >, detail::decay_t< U > >::value &&!detail::conjunction< std::is_scalar< T >, std::is_same< T, detail::decay_t< U > > >::value &&std::is_constructible< T, U >::value &&std::is_assignable< G &, U >::value &&std::is_nothrow_move_constructible< E >::value)> * = nullptr> | |
Expected & | operator= (U &&v) |
template<class G = E, detail::enable_if_t< std::is_nothrow_copy_constructible< G >::value &&std::is_assignable< G &, G >::value > * = nullptr> | |
Expected & | operator= (const Unexpected< G > &rhs) |
template<class G = E, detail::enable_if_t< std::is_nothrow_move_constructible< G >::value &&std::is_move_assignable< G >::value > * = nullptr> | |
Expected & | operator= (Unexpected< G > &&rhs) noexcept |
template<class... Args, detail::enable_if_t< std::is_nothrow_constructible< T, Args &&... >::value > * = nullptr> | |
void | emplace (Args &&... args) |
template<class... Args, detail::enable_if_t<!std::is_nothrow_constructible< T, Args &&... >::value > * = nullptr> | |
void | emplace (Args &&... args) |
template<class U, class... Args, detail::enable_if_t< std::is_nothrow_constructible< T, std::initializer_list< U > &, Args &&... >::value > * = nullptr> | |
void | emplace (std::initializer_list< U > il, Args &&... args) |
template<class U, class... Args, detail::enable_if_t<!std::is_nothrow_constructible< T, std::initializer_list< U > &, Args &&... >::value > * = nullptr> | |
void | emplace (std::initializer_list< U > il, Args &&... args) |
template<class OT = T, class OE = E> | |
detail::enable_if_t< detail::is_swappable< OT >::value &&detail::is_swappable< OE >::value &&(std::is_nothrow_move_constructible< OT >::value||std::is_nothrow_move_constructible< OE >::value)> | swap (Expected &rhs) noexcept(std::is_nothrow_move_constructible< T >::value &&detail::is_nothrow_swappable< T >::value &&std::is_nothrow_move_constructible< E >::value &&detail::is_nothrow_swappable< E >::value) |
constexpr const T * | operator-> () const |
UTILS_EXPECTED_11_CONSTEXPR T * | operator-> () |
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr> | |
constexpr const U & | operator* () const & |
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr> | |
UTILS_EXPECTED_11_CONSTEXPR U & | operator* () & |
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr> | |
constexpr const U && | operator* () const && |
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr> | |
UTILS_EXPECTED_11_CONSTEXPR U && | operator* () && |
constexpr bool | has_value () const noexcept |
constexpr | operator bool () const noexcept |
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr> | |
UTILS_EXPECTED_11_CONSTEXPR const U & | value () const & |
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr> | |
UTILS_EXPECTED_11_CONSTEXPR U & | value () & |
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr> | |
UTILS_EXPECTED_11_CONSTEXPR const U && | value () const && |
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr> | |
UTILS_EXPECTED_11_CONSTEXPR U && | value () && |
constexpr const E & | error () const & |
UTILS_EXPECTED_11_CONSTEXPR E & | error () & |
constexpr const E && | error () const && |
UTILS_EXPECTED_11_CONSTEXPR E && | error () && |
template<class U> | |
constexpr T | value_or (U &&v) const & |
template<class U> | |
UTILS_EXPECTED_11_CONSTEXPR T | value_or (U &&v) && |