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)