From 72c130d8a9705f2356d8ca08f92e2f841c3b7528 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Fri, 1 Dec 2023 22:50:25 -0600 Subject: [PATCH] [ox/std] Fix Result move constructor, add & and && variants of unwrap --- deps/ox/src/ox/std/error.hpp | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/deps/ox/src/ox/std/error.hpp b/deps/ox/src/ox/std/error.hpp index 5f4ba25a..ca6a6e9a 100644 --- a/deps/ox/src/ox/std/error.hpp +++ b/deps/ox/src/ox/std/error.hpp @@ -138,7 +138,7 @@ struct [[nodiscard]] Result { } template - constexpr Result(const Result &&other) noexcept: value(std::move(other.value)), error(std::move(other.error)) { + constexpr Result(Result &&other) noexcept: value(std::move(other.value)), error(std::move(other.error)) { } constexpr Result(const Error &error) noexcept: value(), error(error) { @@ -182,23 +182,44 @@ struct [[nodiscard]] Result { return error; } - constexpr auto &unwrap() noexcept { + constexpr T &unwrap() & noexcept { if (error) { oxPanic(error, "Failed unwrap"); } return value; } - constexpr auto &unwrapThrow() { + constexpr T &&unwrap() && noexcept { + if (error) { + oxPanic(error, "Failed unwrap"); + } + return std::move(value); + } + + constexpr T const&unwrap() const & noexcept { + if (error) [[unlikely]] { + oxPanic(error, "Failed unwrap"); + } + return value; + } + + constexpr T &unwrapThrow() & { if (error) { throw ox::Exception(error); } return value; } - constexpr const auto &unwrap() const noexcept { - if (error) [[unlikely]] { - oxPanic(error, "Failed unwrap"); + constexpr T &&unwrapThrow() && { + if (error) { + throw ox::Exception(error); + } + return std::move(value); + } + + constexpr T const&unwrapThrow() const & { + if (error) { + throw ox::Exception(error); } return value; }