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