YOrch 1.0.0
Loading...
Searching...
No Matches
traits.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <concepts> // IWYU pragma: keep
4#include <exception>
5#include <type_traits>
6#include <utility>
7
8#include "../../context.hpp"
9#include "../../result.hpp"
10#include "../task/traits.hpp" // IWYU pragma: keep
11
12namespace yorch::detail {
13
14template <typename Task, typename Ctx, typename Prev>
16 decltype(std::declval<Task>().invoke_raw(std::declval<exec_context<Ctx, Prev>&>()));
17
28template <typename R>
29inline constexpr bool default_catch_supported_v =
30 std::is_void_v<R> ||
31 std::is_same_v<R, step_result>;
32
43template <typename Policy, typename = void>
45
46template <typename Policy>
47struct policy_result<Policy, std::void_t<std::invoke_result_t<Policy&, const std::exception_ptr&>>> {
48 using type = std::invoke_result_t<Policy&, const std::exception_ptr&>;
49};
50
51template <typename Policy>
53
54template <typename Task, typename = void>
56
57template <typename Task>
59 Task,
60 std::void_t<typename std::remove_cvref_t<Task>::raw_result_type>
61> {
62 using type = typename std::remove_cvref_t<Task>::raw_result_type;
63};
64
65template <typename Task>
67
88template <typename Task, typename Ctx, typename Prev, typename = void>
90
91template <typename Task, typename Ctx, typename Prev>
93 Task,
94 Ctx,
95 Prev,
96 std::void_t<declared_task_raw_result_t<Task>>
97> : std::bool_constant<
98 std::same_as<
99 raw_task_result_t<Task&, Ctx, Prev>,
100 declared_task_raw_result_t<Task>>> {};
101
102template <typename Task, typename Ctx, typename Prev>
105
106template <typename Task, typename = void>
108
109template <typename Task>
111 Task,
112 std::void_t<declared_task_raw_result_t<Task>>
113> {
115 using raw_result_type = std::conditional_t<std::is_void_v<inner_type>, step_result, inner_type>;
116};
117
118template <typename Task, typename Policy, typename = void>
120
121template <typename Task, typename Policy>
123 Task,
124 Policy,
125 std::void_t<
126 declared_task_raw_result_t<Task>,
127 policy_result_t<std::remove_cvref_t<Policy>>
128 >
129> {
132 using raw_result_type = std::conditional_t<std::is_void_v<inner_type>, policy_type, inner_type>;
133};
134
135template <typename Task, typename = void>
137
138template <typename Task>
140 Task,
141 std::void_t<declared_task_raw_result_t<Task>>
142> {
144};
145
161template <typename R, typename Policy, typename = void>
162struct catch_policy_supported : std::false_type {};
163
164template <typename R, typename Policy>
166 R,
167 Policy,
168 std::void_t<std::invoke_result_t<Policy&, const std::exception_ptr&>>>
169 : std::bool_constant<
170 std::is_nothrow_invocable_v<Policy&, const std::exception_ptr&> &&
171 (std::is_void_v<R>
172 ? std::is_same_v<policy_result_t<Policy>, step_result>
173 : (!std::is_reference_v<R> &&
174 std::is_convertible_v<policy_result_t<Policy>, R>))> {};
175
176template <typename R, typename Policy>
177inline constexpr bool catch_policy_supported_v =
179
180} // namespace yorch::detail
constexpr bool declared_task_raw_result_matches_invoke_raw_v
Definition traits.hpp:103
decltype(std::declval< Task >().invoke_raw(std::declval< exec_context< Ctx, Prev > & >())) raw_task_result_t
Definition traits.hpp:16
constexpr bool catch_policy_supported_v
Definition traits.hpp:177
typename policy_result< Policy >::type policy_result_t
Definition traits.hpp:52
constexpr bool default_catch_supported_v
Reports whether the default catch_as_failure(task) adapter can synthesize a failure result for raw re...
Definition traits.hpp:29
constexpr bool is_adapter_descriptor_v
Definition adapters.hpp:63
typename declared_task_raw_result< Task >::type declared_task_raw_result_t
Definition traits.hpp:66
std::conditional_t< std::is_void_v< inner_type >, step_result, inner_type > raw_result_type
Definition traits.hpp:115
Trait that reports whether a fallback policy is compatible with raw task result type R.
Definition traits.hpp:162
Reports whether a task's declared raw_result_type agrees with the concrete return type of invoke_raw(...
Definition traits.hpp:89
Extracts the result type returned by an exception fallback policy.
Definition traits.hpp:44
Lightweight borrowed view used during execution.
Definition context.hpp:187
Represents the basic outcome of a task step.
Definition result.hpp:42