Navigation :
Prerequisites
Build and install
Review of Error Handling Frameworks
Motivation
Future ABI stability guarantees
Tutorial
Recipes
Experimental
API reference
-
Macros
-
Concepts
-
Converters
-
Traits
-
Policies
-
Types
--
`basic_outcome<T, EC, EP, NoValuePolicy>`
--- `basic_outcome() = delete`
--- `basic_outcome(basic_outcome &&)`
--- `basic_outcome(const basic_outcome &)`
--- `basic_outcome &operator=(basic_outcome &&)`
--- `basic_outcome &operator=(const basic_outcome &)`
--- `~basic_outcome()`
--- `basic_outcome(Args...) = delete`
--- `basic_outcome(X &&) = delete`
--- `basic_outcome(R &&)`
--- `basic_outcome(S &&)`
--- `basic_outcome(ErrorCondEnum &&)`
--- `basic_outcome(P &&)`
--- `basic_outcome(S &&, P &&)`
--- `explicit basic_outcome(concepts::value_or_error<T, E> &&)`
--- `explicit basic_outcome(const basic_outcome<A, B, C, D> &)`
--- `explicit basic_outcome(basic_outcome<A, B, C, D> &&)`
--- `explicit basic_outcome(const basic_result<A, B, C> &)`
--- `explicit basic_outcome(basic_result<A, B, C> &&)`
--- `explicit basic_outcome(const basic_result<A, B, C> &)`
--- `explicit basic_outcome(basic_result<A, B, C> &&)`
--- `explicit basic_outcome(in_place_type_t<value_type_if_enabled>, Args ...)`
--- `explicit basic_outcome(in_place_type_t<value_type_if_enabled>, std::initializer_list<U>, Args ...)`
--- `explicit basic_outcome(in_place_type_t<error_type_if_enabled>, Args ...)`
--- `explicit basic_outcome(in_place_type_t<error_type_if_enabled>, std::initializer_list<U>, Args ...)`
--- `explicit basic_outcome(in_place_type_t<exception_type_if_enabled>, Args ...)`
--- `explicit basic_outcome(in_place_type_t<exception_type_if_enabled>, std::initializer_list<U>, Args ...)`
--- `basic_outcome(A1 &&, A2 &&, Args ...)`
--- `basic_outcome(const success_type<T> &)`
--- `basic_outcome(success_type<T> &&)`
--- `basic_outcome(const failure_type<EC> &)`
--- `basic_outcome(failure_type<EC> &&)`
--- `basic_outcome(const failure_type<EC> &)`
--- `basic_outcome(failure_type<EC> &&)`
--- `basic_outcome(const failure_type<EP> &)`
--- `basic_outcome(failure_type<EP> &&)`
--- `basic_outcome(const failure_type<EC, EP> &)`
--- `basic_outcome(failure_type<EC, EP> &&)`
--- `explicit operator bool() const noexcept`
--- `bool has_value() const noexcept`
--- `bool has_error() const noexcept`
--- `bool has_exception() const noexcept`
--- `bool has_failure() const noexcept`
--- `value_type &assume_value() & noexcept`
--- `const value_type &assume_value() const & noexcept`
--- `value_type &&assume_value() && noexcept`
--- `const value_type &&assume_value() const && noexcept`
--- `value_type &value() &`
--- `const value_type &value() const &`
--- `value_type &&value() &&`
--- `const value_type &&value() const &&`
--- `error_type &assume_error() & noexcept`
--- `const error_type &assume_error() const & noexcept`
--- `error_type &&assume_error() && noexcept`
--- `const error_type &&assume_error() const && noexcept`
--- `error_type &error() &`
--- `const error_type &error() const &`
--- `error_type &&error() &&`
--- `const error_type &&error() const &&`
--- `exception_type &assume_exception() & noexcept`
--- `const exception_type &assume_exception() const & noexcept`
--- `const exception_type &&assume_exception() const && noexcept`
--- `exception_type &&assume_exception() && noexcept`
--- `exception_type &exception() &`
--- `const exception_type &exception() const &`
--- `exception_type &&exception() &&`
--- `const exception_type &&exception() const &&`
--- `exception_type failure() const noexcept`
--- `bool operator==(const basic_result<A, B, C> &) const`
--- `bool operator==(const basic_outcome<A, B, C, D> &) const`
--- `bool operator==(const success_type<A> &) const`
--- `bool operator==(const failure_type<A, B> &) const`
--- `bool operator!=(const basic_result<A, B, C> &) const`
--- `bool operator!=(const basic_outcome<A, B, C, D> &) const`
--- `bool operator!=(const success_type<A> &) const`
--- `bool operator!=(const failure_type<A, B> &) const`
--- `void swap(basic_outcome &)`
--- `failure_type<error_type, exception_type> as_failure() const &`
--- `failure_type<error_type, exception_type> as_failure() &&`
--
`basic_result<T, E, NoValuePolicy>`
-- `bad_outcome_access`
-- `bad_result_access_with<EC>`
-- `bad_result_access`
-- `eager<T, Executor = void>/atomic_eager<T, Executor = void>`
-- `failure_type<EC, EP = void>`
-- `generator<T, Executor = void>`
-- `in_place_type_t<T>`
-- `lazy<T, Executor = void>/atomic_lazy<T, Executor = void>`
-- `success_type<T>`
-
Aliases
-
Functions
Frequently asked questions
Videos
Changelog
History
void swap(basic_outcome &)
Swap one basic_outcome with another, with the strong guarantee. Constexpr if move constructors and move assignments of value_type
, error_type
and exception_type
are noexcept.
Requires : Always available.
Complexity : If the move constructor and move assignment for value_type
, error_type
and exception_type
are noexcept, the complexity is the same as for the swap()
implementations of the value_type
, error_type
and exception_type
. Otherwise, complexity is not preserved, as strong_swap(bool &all_good, T &a, T &b)
is used instead of swap()
. This function defaults to using one move construction and two assignments, and it will attempt extra move assignments in order to restore the state upon entry if a failure occurs.
Guarantees : If an exception is thrown during the swap operation, the state of all three operands on entry is attempted to be restored, in order to implement the strong guarantee. If that too fails, the flag bits are forced to something consistent such that there can be no simultaneously valued and errored/excepted state, or valueless and errorless/exceptionless. The flag has_lost_consistency()
becomes true for both operands, which are now likely in an inconsistent state.