From faa59b367985648df901bdd7b5bba69ef898ea08 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Thu, 11 Dec 2025 11:02:33 +0100 Subject: [PATCH] util: Add Expected::swap() --- src/test/util_expected_tests.cpp | 9 +++++++++ src/util/expected.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/src/test/util_expected_tests.cpp b/src/test/util_expected_tests.cpp index 356735b221e..5979250ea90 100644 --- a/src/test/util_expected_tests.cpp +++ b/src/test/util_expected_tests.cpp @@ -122,4 +122,13 @@ BOOST_AUTO_TEST_CASE(unexpected_error_accessors) BOOST_CHECK_EQUAL(*moved, -2); } +BOOST_AUTO_TEST_CASE(expected_swap) +{ + Expected> a{Unexpected{std::make_unique(-1)}}; + Expected> b{"good"}; + a.swap(b); + BOOST_CHECK_EQUAL(a.value(), "good"); + BOOST_CHECK_EQUAL(*b.error(), -1); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/util/expected.h b/src/util/expected.h index b01d866a863..66fb98e0558 100644 --- a/src/util/expected.h +++ b/src/util/expected.h @@ -88,6 +88,8 @@ public: constexpr E& error() & noexcept LIFETIMEBOUND { return *Assert(std::get_if<1>(&m_data)); } constexpr E&& error() && noexcept LIFETIMEBOUND { return std::move(error()); } + constexpr void swap(Expected& other) noexcept { m_data.swap(other.m_data); } + constexpr T& operator*() & noexcept LIFETIMEBOUND { return value(); } constexpr const T& operator*() const& noexcept LIFETIMEBOUND { return value(); } constexpr T&& operator*() && noexcept LIFETIMEBOUND { return std::move(value()); }