ImFusion SDK 4.3
Expected< T, E > Class Template Reference

#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...

+ Inheritance diagram for Expected< T, E >:

Detailed Description

template<class T, class E>
class ImFusion::Utils::Expected< T, E >

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
 
Expectedoperator= (const Expected &rhs)=default
 
Expectedoperator= (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>
Expectedoperator= (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>
Expectedoperator= (U &&v)
 
template<class G = E, detail::enable_if_t< std::is_nothrow_copy_constructible< G >::value &&std::is_assignable< G &, G >::value > * = nullptr>
Expectedoperator= (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>
Expectedoperator= (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) &&
 

The documentation for this class was generated from the following file:
Search Tab / S to search, Esc to close