8.9 KiB
[expected.void.monadic]
22 General utilities library [utilities]
22.8 Expected objects [expected]
22.8.7 Partial specialization of expected for void types [expected.void]
22.8.7.7 Monadic operations [expected.void.monadic]
template<class F> constexpr auto and_then(F&& f) &; template<class F> constexpr auto and_then(F&& f) const &;
Let U be remove_cvref_t<invoke_result_t>.
Constraints: is_constructible_v<E, decltype(error())>> is true.
Mandates: U is a specialization of expected andis_same_v<U::error_type, E> is true.
Effects: Equivalent to:if (has_value())return invoke(std::forward(f));elsereturn U(unexpect, error());
template<class F> constexpr auto and_then(F&& f) &&; template<class F> constexpr auto and_then(F&& f) const &&;
Let U be remove_cvref_t<invoke_result_t>.
Constraints: is_constructible_v<E, decltype(std::move(error()))> is true.
Mandates: U is a specialization of expected andis_same_v<U::error_type, E> is true.
Effects: Equivalent to:if (has_value())return invoke(std::forward(f));elsereturn U(unexpect, std::move(error()));
template<class F> constexpr auto or_else(F&& f) &; template<class F> constexpr auto or_else(F&& f) const &;
Let G be remove_cvref_t<invoke_result_t<F, decltype(error())>>.
Mandates: G is a specialization of expected andis_same_v<G::value_type, T> is true.
Effects: Equivalent to:if (has_value())return G();elsereturn invoke(std::forward(f), error());
template<class F> constexpr auto or_else(F&& f) &&; template<class F> constexpr auto or_else(F&& f) const &&;
Let G beremove_cvref_t<invoke_result_t<F, decltype(std::move(error()))>>.
Mandates: G is a specialization of expected andis_same_v<G::value_type, T> is true.
Effects: Equivalent to:if (has_value())return G();elsereturn invoke(std::forward(f), std::move(error()));
template<class F> constexpr auto transform(F&& f) &; template<class F> constexpr auto transform(F&& f) const &;
Let U be remove_cv_t<invoke_result_t>.
Constraints: is_constructible_v<E, decltype(error())> is true.
Mandates: U is a valid value type for expected.
If is_void_v isfalse, the declarationU u(invoke(std::forward(f))); is well-formed.
Effects:
-
If has_value() is false, returnsexpected<U, E>(unexpect, error()).
-
Otherwise, if is_void_v is false, returns anexpected<U, E> object whose has_val member is true andval member is direct-non-list-initialized withinvoke(std::forward(f)).
-
Otherwise, evaluates invoke(std::forward(f)) and then returnsexpected<U, E>().
template<class F> constexpr auto transform(F&& f) &&; template<class F> constexpr auto transform(F&& f) const &&;
Let U be remove_cv_t<invoke_result_t>.
Constraints: is_constructible_v<E, decltype(std::move(error()))> is true.
Mandates: U is a valid value type for expected.
If is_void_v isfalse, the declarationU u(invoke(std::forward(f))); is well-formed.
Effects:
-
If has_value() is false, returnsexpected<U, E>(unexpect, std::move(error())).
-
Otherwise, if is_void_v is false, returns anexpected<U, E> object whose has_val member is true andval member is direct-non-list-initialized withinvoke(std::forward(f)).
-
Otherwise, evaluates invoke(std::forward(f)) and then returnsexpected<U, E>().
template<class F> constexpr auto transform_error(F&& f) &; template<class F> constexpr auto transform_error(F&& f) const &;
Let G be remove_cv_t<invoke_result_t<F, decltype(error())>>.
Mandates: G is a valid template argument for unexpected ([expected.un.general]) and the declarationG g(invoke(std::forward(f), error())); is well-formed.
Returns: If has_value() is true, expected<T, G>(); otherwise, anexpected<T, G> object whose has_val member is false and unex member is direct-non-list-initialized withinvoke(std::forward(f), error()).
template<class F> constexpr auto transform_error(F&& f) &&; template<class F> constexpr auto transform_error(F&& f) const &&;
Let G beremove_cv_t<invoke_result_t<F, decltype(std::move(error()))>>.
Mandates: G is a valid template argument for unexpected ([expected.un.general]) and the declarationG g(invoke(std::forward(f), std::move(error()))); is well-formed.
Returns: If has_value() is true, expected<T, G>(); otherwise, anexpected<T, G> object whose has_val member is false and unex member is direct-non-list-initialized withinvoke(std::forward(f), std::move(error())).