From bae8e21a8b51c1e48c51d342f8f43a012b0d5285 Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Sun, 29 Dec 2019 00:50:25 -0500 Subject: [PATCH] Kernel: Add move assign operator to KResultOr --- Kernel/KResult.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Kernel/KResult.h b/Kernel/KResult.h index c631b226fc..9e6f6f6ed0 100644 --- a/Kernel/KResult.h +++ b/Kernel/KResult.h @@ -56,12 +56,30 @@ public: m_is_error = other.m_is_error; if (m_is_error) m_error = other.m_error; - else + else { new (&m_storage) T(move(other.value())); + other.value().~T(); + } other.m_is_error = true; other.m_error = KSuccess; } + KResultOr& operator=(KResultOr&& other) + { + if (!m_is_error) + value().~T(); + m_is_error = other.m_is_error; + if (m_is_error) + m_error = other.m_error; + else { + new (&m_storage) T(move(other.value())); + other.value().~T(); + } + other.m_is_error = true; + other.m_error = KSuccess; + return *this; + } + ~KResultOr() { if (!m_is_error)