YOrch 1.0.0
Loading...
Searching...
No Matches
adapters.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <exception>
4#include <type_traits>
5#include <utility>
6
7#include "../../../task_adapters.hpp"
8
9namespace yorch::detail {
10
11template <typename Policy>
13 requires(Policy& policy, const std::exception_ptr& ep) {
14 { policy(ep) } noexcept;
15 };
16
18
19template <typename Task, typename PolicyLike>
21 if constexpr (std::is_same_v<std::remove_cvref_t<PolicyLike>, default_catch_adapter_policy_tag>) {
22 return catch_as_failure(std::forward<Task>(task));
23 } else {
24 return catch_as_failure(std::forward<Task>(task), std::forward<PolicyLike>(policy_like));
25 }
26}
27
28} // namespace yorch::detail
constexpr auto apply_catch_adapter(Task &&task, PolicyLike &&policy_like)
Definition adapters.hpp:20
constexpr bool is_adapter_descriptor_v
Definition adapters.hpp:63
constexpr auto catch_as_failure(Task &&task)
Wraps a task so thrown exceptions become default failure results.
constexpr auto task(F &&f)
Definition core.hpp:207