#pragma once #include #include template struct Expected { Expected(SuccessType&& result) requires ( !std::is_reference_v && !std::is_fundamental_v ) : result(std::move(result)) {} Expected(const SuccessType& result) : result(result) {} Expected(const ErrorType& result) : result(result) {} bool hasValue() const { return std::holds_alternative(this->result); } const SuccessType& value() const { return std::get(this->result); } const ErrorType& error() const { return std::get(this->result); } private: std::variant result; };