M5Utility 0.0.2 git rev:5c1a751
Loading...
Searching...
No Matches
m5::stl::expected< T, E > Class Template Reference

#include <expected.hpp>

Inheritance diagram for m5::stl::expected< T, E >:
m5::stl::detail::expected_move_assign_base< T, E, bool > m5::stl::detail::expected_delete_ctor_base< T, E, EnableCopy, EnableMove > m5::stl::detail::expected_delete_assign_base< T, E, EnableCopy, EnableMove > m5::stl::detail::expected_default_ctor_base< T, E, Enable >

Public Types

typedef T value_type
 
typedef E error_type
 
typedef unexpected< E > unexpected_type
 

Public Member Functions

template<class F >
TL_EXPECTED_11_CONSTEXPR auto and_then (F &&f) &-> decltype(and_then_impl(std::declval< expected & >(), std::forward< F >(f)))
 
template<class F >
TL_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 >
TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval< expected & >(), std::declval< F && >())) map (F &&f) &
 
template<class F >
TL_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 >
TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval< expected & >(), std::declval< F && >())) transform (F &&f) &
 
template<class F >
TL_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 >
TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval< expected & >(), std::declval< F && >())) map_error (F &&f) &
 
template<class F >
TL_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 >
TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval< expected & >(), std::declval< F && >())) transform_error (F &&f) &
 
template<class F >
TL_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 TL_EXPECTED_11_CONSTEXPR or_else (F &&f) &
 
template<class F >
expected TL_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>
TL_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>
TL_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>
TL_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>
TL_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>
TL_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>
TL_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
 
TL_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>
TL_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>
TL_EXPECTED_11_CONSTEXPR U && operator* () &&
 
constexpr bool has_value () const noexcept
 
constexpr bool has_error () const noexcept
 
constexpr operator bool () const noexcept
 
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr>
TL_EXPECTED_11_CONSTEXPR const U & value () const &
 
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr>
TL_EXPECTED_11_CONSTEXPR U & value () &
 
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr>
TL_EXPECTED_11_CONSTEXPR const U && value () const &&
 
template<class U = T, detail::enable_if_t<!std::is_void< U >::value > * = nullptr>
TL_EXPECTED_11_CONSTEXPR U && value () &&
 
constexpr const E & error () const &
 
TL_EXPECTED_11_CONSTEXPR E & error () &
 
constexpr const E && error () const &&
 
TL_EXPECTED_11_CONSTEXPR E && error () &&
 
template<class U >
constexpr T value_or (U &&v) const &
 
template<class U >
TL_EXPECTED_11_CONSTEXPR T value_or (U &&v) &&
 
template<class G = E>
constexpr E error_or (G &&e) const &
 
template<class G = E>
TL_EXPECTED_11_CONSTEXPR E error_or (G &&e) &&
 

Detailed Description

template<class T, class E>
class m5::stl::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.