M5Utility 0.0.2 git rev:5c1a751
|
#include <expected.hpp>
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 |
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> | |
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> | |
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 |
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) && |
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.