Added void variant of Result.

This commit is contained in:
Patrick Wuttke 2025-09-22 21:42:43 +02:00
parent 32ccaad00a
commit 5a111df9ea

View File

@ -60,6 +60,32 @@ public:
[[nodiscard]] const TError& getError() const MIJIN_NOEXCEPT { return std::get<TError>(state_); }
};
namespace impl
{
struct ResultSuccess {};
}
template<typename TError>
class ResultBase<void, TError> : public ResultBase<impl::ResultSuccess, TError>
{
public:
ResultBase() MIJIN_NOEXCEPT : ResultBase<impl::ResultSuccess, TError>(impl::ResultSuccess{}) {}
ResultBase(const ResultBase&) MIJIN_NOEXCEPT = default;
ResultBase(ResultBase&&) MIJIN_NOEXCEPT = default;
ResultBase(TError errorValue) MIJIN_NOEXCEPT : ResultBase<impl::ResultSuccess, TError>(std::move(errorValue)) {}
ResultBase& operator=(const ResultBase&) = default;
ResultBase& operator=(ResultBase&&) = default;
impl::ResultSuccess& operator*() MIJIN_NOEXCEPT = delete;
const impl::ResultSuccess& operator*() const MIJIN_NOEXCEPT = delete;
impl::ResultSuccess* operator->() MIJIN_NOEXCEPT = delete;
const impl::ResultSuccess* operator->() const MIJIN_NOEXCEPT = delete;
[[nodiscard]] impl::ResultSuccess& getValue() MIJIN_NOEXCEPT = delete;
[[nodiscard]] const impl::ResultSuccess& getValue() const MIJIN_NOEXCEPT = delete;
};
struct ResultError
{
std::string message;
@ -73,7 +99,7 @@ struct ResultError
ResultError& operator=(ResultError&&) MIJIN_NOEXCEPT = default;
};
template<typename TSuccess>
template<typename TSuccess = void>
using Result = ResultBase<TSuccess, ResultError>;
//