YOrch 1.0.0
Loading...
Searching...
No Matches
traits.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <type_traits>
4
5namespace yorch::detail {
6
10
29template <typename Task, typename = void>
31
32template <typename Task>
34 Task,
35 std::void_t<typename std::remove_cvref_t<Task>::output_type>
36> {
37 using type = typename std::remove_cvref_t<Task>::output_type;
38};
39
40template <typename Task>
42
43template <typename Task, typename = void>
44struct has_declared_task_output : std::false_type {};
45
46template <typename Task>
48 Task,
49 std::void_t<declared_task_output_t<Task>>
50> : std::true_type {};
51
52template <typename Task>
53inline constexpr bool has_declared_task_output_v =
55
56template <typename Task, typename = void>
60
61template <typename Task>
63 Task,
64 std::void_t<typename std::remove_cvref_t<Task>::output_protocol>
65> {
66 using type = typename std::remove_cvref_t<Task>::output_protocol;
67};
68
69template <typename Task>
72
73template <typename Task>
75 std::is_same_v<
78
79template <typename Task>
81 std::is_same_v<
84
85template <typename Task, typename = void>
87
88template <typename Task>
90 Task,
91 std::void_t<declared_task_output_t<Task>>
92> {
94};
95
96template <typename Task, typename = void>
98
99template <typename Task>
101 Task,
102 std::void_t<typename std::remove_cvref_t<Task>::output_protocol>
103> {
105};
106
107} // namespace yorch::detail
constexpr bool task_uses_direct_output_protocol_v
Definition traits.hpp:74
typename declared_task_output< Task >::type declared_task_output_t
Definition traits.hpp:41
constexpr bool task_uses_forward_prev_output_protocol_v
Definition traits.hpp:80
typename declared_task_output_protocol< Task >::type declared_task_output_protocol_t
Definition traits.hpp:71
constexpr bool is_adapter_descriptor_v
Definition adapters.hpp:63
constexpr bool has_declared_task_output_v
Definition traits.hpp:53
Detects a task's declared logical output type.
Definition traits.hpp:30