#pragma once #include #include namespace sc { struct RendererError { std::string message; }; // C++20 does not provide std::expected. Use a variant-based result type so // fallible renderer operations do not rely on exceptions. template using RendererResult = std::variant; template constexpr bool is_renderer_error(const RendererResult& result) noexcept { return std::holds_alternative(result); } template T& renderer_value(RendererResult& result) { return std::get(result); } template const T& renderer_value(const RendererResult& result) { return std::get(result); } template RendererError& renderer_error(RendererResult& result) { return std::get(result); } template const RendererError& renderer_error(const RendererResult& result) { return std::get(result); } } // namespace sc