mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-27 15:28:49 +02:00
util: Add Unexpected::error()
This is not needed, but a bit closer to the std lib.
This commit is contained in:
@@ -7,6 +7,11 @@
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
|
||||
using namespace util;
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(util_expected_tests)
|
||||
@@ -65,4 +70,17 @@ BOOST_AUTO_TEST_CASE(expected_error)
|
||||
BOOST_CHECK_EQUAL(read.error(), "fail1");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(unexpected_error_accessors)
|
||||
{
|
||||
Unexpected u{std::make_unique<int>(-1)};
|
||||
BOOST_CHECK_EQUAL(*u.error(), -1);
|
||||
|
||||
*u.error() -= 1;
|
||||
const auto& read{u};
|
||||
BOOST_CHECK_EQUAL(*read.error(), -2);
|
||||
|
||||
const auto moved{std::move(u).error()};
|
||||
BOOST_CHECK_EQUAL(*moved, -2);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
@@ -20,8 +20,14 @@ template <class E>
|
||||
class Unexpected
|
||||
{
|
||||
public:
|
||||
constexpr explicit Unexpected(E e) : err(std::move(e)) {}
|
||||
E err;
|
||||
constexpr explicit Unexpected(E e) : m_error(std::move(e)) {}
|
||||
|
||||
constexpr const E& error() const& noexcept LIFETIMEBOUND { return m_error; }
|
||||
constexpr E& error() & noexcept LIFETIMEBOUND { return m_error; }
|
||||
constexpr E&& error() && noexcept LIFETIMEBOUND { return std::move(m_error); }
|
||||
|
||||
private:
|
||||
E m_error;
|
||||
};
|
||||
|
||||
/// The util::Expected class provides a standard way for low-level functions to
|
||||
@@ -40,7 +46,7 @@ public:
|
||||
constexpr Expected() : m_data{std::in_place_index_t<0>{}, ValueType{}} {}
|
||||
constexpr Expected(ValueType v) : m_data{std::in_place_index_t<0>{}, std::move(v)} {}
|
||||
template <class Err>
|
||||
constexpr Expected(Unexpected<Err> u) : m_data{std::in_place_index_t<1>{}, std::move(u.err)}
|
||||
constexpr Expected(Unexpected<Err> u) : m_data{std::in_place_index_t<1>{}, std::move(u).error()}
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user