1#ifndef XRPL_BASICS_EXPECTED_H_INCLUDED
2#define XRPL_BASICS_EXPECTED_H_INCLUDED
4#include <xrpl/basics/contract.h>
6#include <boost/outcome.hpp>
37 Throw<bad_expected_access>();
45 Throw<bad_expected_access>();
53 Throw<bad_expected_access>();
92 return std::move(
val_);
98 return std::move(
val_);
106template <
typename E, std::
size_t N>
110template <
class T,
class E>
112 :
private boost::outcome_v2::result<T, E, detail::throw_policy>
114 using Base = boost::outcome_v2::result<T, E, detail::throw_policy>;
117 template <
typename U>
124 template <
typename U>
127 :
Base(boost::outcome_v2::in_place_type_t<E>{}, std::move(e.
value()))
134 return Base::has_value();
140 return Base::value();
146 return Base::value();
152 return Base::error();
158 return Base::error();
162 operator bool()
const
170 [[nodiscard]]
constexpr T&
173 return this->value();
176 [[nodiscard]]
constexpr T
const&
179 return this->value();
182 [[nodiscard]]
constexpr T*
185 return &this->value();
188 [[nodiscard]]
constexpr T
const*
191 return &this->value();
199 :
private boost::outcome_v2::result<void, E, detail::throw_policy>
201 using Base = boost::outcome_v2::result<void, E, detail::throw_policy>;
210 template <
typename U>
219 return Base::error();
225 return Base::error();
229 operator bool()
const
231 return Base::has_value();
constexpr E const & error() const
constexpr Expected(Unexpected< U > e)
boost::outcome_v2::result< void, E, detail::throw_policy > Base
constexpr T const * operator->() const
constexpr T const & value() const
constexpr bool has_value() const
constexpr T const & operator*() const
constexpr E const & error() const
constexpr Expected(Unexpected< U > e)
boost::outcome_v2::result< T, E, detail::throw_policy > Base
constexpr T & operator*()
constexpr Expected(U &&r)
constexpr T * operator->()
constexpr E && value() &&
constexpr Unexpected(E const &e)
constexpr E const && value() const &&
constexpr E const & value() const &
constexpr Unexpected(E &&e)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Expected is an approximation of std::expected (hoped for in C++23)
static constexpr void wide_exception_check(Impl &&self)
static constexpr void wide_value_check(Impl &&self)
static constexpr void wide_error_check(Impl &&self)