Prepare BResult for non-copyable types

This commit is contained in:
MacroFake 2022-07-12 19:28:03 +02:00
parent 1d89fc695a
commit fa8de09edc
No known key found for this signature in database
GPG Key ID: CE2B75697E69A548

View File

@ -6,6 +6,7 @@
#define BITCOIN_UTIL_RESULT_H
#include <util/translation.h>
#include <variant>
/*
@ -18,9 +19,9 @@ private:
std::variant<bilingual_str, T> m_variant;
public:
BResult() : m_variant(Untranslated("")) {}
BResult(const T& _obj) : m_variant(_obj) {}
BResult(const bilingual_str& error) : m_variant(error) {}
BResult() : m_variant{Untranslated("")} {}
BResult(T obj) : m_variant{std::move(obj)} {}
BResult(bilingual_str error) : m_variant{std::move(error)} {}
/* Whether the function succeeded or not */
bool HasRes() const { return std::holds_alternative<T>(m_variant); }
@ -30,6 +31,11 @@ public:
assert(HasRes());
return std::get<T>(m_variant);
}
T ReleaseObj()
{
assert(HasRes());
return std::move(std::get<T>(m_variant));
}
/* In case of failure, the error cause */
const bilingual_str& GetError() const {