import CppUtils.Execution.Pipeline;
import CppUtils;
std::optional<ErrorType> firstError = std::nullopt;
template <class Callable, class... Args>auto Pipeline::invoke(Callable&& callable, Args&&... args);
template <class Callable, class... Args>auto Pipeline::tryInvoke(Callable&& callable, Args&&... args);
[[nodiscard]] auto Pipeline::result(this auto&& self) -> std::expected<void, ErrorType>;
template <class ValueType>[[nodiscard]] auto Pipeline::result(this auto&& self, ValueType&& value) -> std::expected<std::remove_cvref_t<ValueType>, ErrorType>;
[[nodiscard]] auto Pipeline::success() const noexcept -> bool;
[[nodiscard]] auto Pipeline::error() const noexcept -> const std::optional<ErrorType>&;
[[nodiscard]] explicit Pipeline::operator bool() const noexcept;
auto Pipeline::reset() noexcept -> void;