YOrch 1.0.0
Loading...
Searching...
No Matches
diagnostics.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <tuple>
4#include "core.hpp" // IWYU pragma: keep
5
6namespace yorch {
7
8template <typename F>
9// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
10constexpr void task(F&&)
11 requires detail::inferable_direct_output_callable<F> {
12 static_assert(
14 "yorch::task(...) received a direct-output callable whose last parameter is yorch::direct_out<T>; use yorch::task_into(...) instead.");
15}
16
17template <typename F>
18// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
19constexpr void task(F&&)
20 requires detail::member_bind_callable<F> {
21 static_assert(
23 "yorch::task(...) does not accept member function pointers; use bind_member(...) first.");
24}
25
26template <typename Task>
27// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
28constexpr void task(Task&&)
29 requires detail::bind_task_object<Task> &&
30 detail::task_uses_direct_output_protocol_v<Task> {
31 static_assert(
33 "yorch::task(...) does not accept prebuilt direct-output tasks; pass them directly to root_into(...) or node_into<Level>(...) instead.");
34}
35
36template <typename F, typename AdapterChain>
37// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
38constexpr void task(F&&, AdapterChain&&)
39 requires detail::inferable_direct_output_callable<F> &&
40 detail::adapter_chain_like<AdapterChain> {
41 static_assert(
43 "yorch::task(...) received a direct-output callable whose last parameter is yorch::direct_out<T>; use yorch::task_into(...) instead.");
44}
45
46template <typename F, typename AdapterChain>
47// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
48constexpr void task(F&&, AdapterChain&&)
49 requires detail::member_bind_callable<F> &&
50 detail::adapter_chain_like<AdapterChain> {
51 static_assert(
53 "yorch::task(...) does not accept member function pointers; use bind_member(...) first.");
54}
55
56template <typename Task>
57// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
58constexpr void task_into(Task&&)
59 requires detail::bind_task_object<Task> {
60 static_assert(
62 "yorch::task_into(...) only accepts a callable whose last parameter is yorch::direct_out<T>; pass prebuilt tasks directly to root/node instead.");
63}
64
65template <typename Task, typename AdapterChain>
66// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
67constexpr void task_into(Task&&, AdapterChain&&)
68 requires detail::bind_task_object<Task> &&
69 detail::adapter_chain_like<AdapterChain> {
70 static_assert(
72 "yorch::task_into(...) only accepts a callable whose last parameter is yorch::direct_out<T>; pass prebuilt tasks directly to root/node instead.");
73}
74
75template <typename F>
76// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
77constexpr void task_into(F&&)
78 requires detail::ordinary_bind_callable<F> {
79 static_assert(
81 "yorch::task_into(...) requires a callable whose last parameter is yorch::direct_out<T>; use yorch::task(...) for ordinary tasks.");
82}
83
84template <typename Task>
85// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
86constexpr void task_forward_prev(Task&&)
87 requires detail::bind_task_object<Task> {
88 static_assert(
90 "yorch::task_forward_prev(...) only accepts a callable; pass prebuilt tasks directly to root/node instead.");
91}
92
93template <typename Task, typename AdapterChain>
94// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
95constexpr void task_forward_prev(Task&&, AdapterChain&&)
96 requires detail::bind_task_object<Task> &&
97 detail::adapter_chain_like<AdapterChain> {
98 static_assert(
100 "yorch::task_forward_prev(...) only accepts a callable; pass prebuilt tasks directly to root/node instead.");
101}
102
103template <typename F>
104// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
105constexpr void task_forward_prev(F&&)
106 requires detail::inferable_direct_output_callable<F> {
107 static_assert(
109 "yorch::task_forward_prev(...) does not accept callables with yorch::direct_out<T>; use yorch::task_into(...) for direct-output materialization.");
110}
111
112template <typename F, typename AdapterChain>
113// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
114constexpr void task_forward_prev(F&&, AdapterChain&&)
115 requires detail::inferable_direct_output_callable<F> &&
116 detail::adapter_chain_like<AdapterChain> {
117 static_assert(
119 "yorch::task_forward_prev(...) does not accept callables with yorch::direct_out<T>; use yorch::task_into(...) for direct-output materialization.");
120}
121
122template <typename F>
123// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
124constexpr void task_forward_prev(F&&)
125 requires detail::member_bind_callable<F> {
126 static_assert(
128 "yorch::task_forward_prev(...) does not support member function pointers in v1.");
129}
130
131template <typename F, typename AdapterChain>
132// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
133constexpr void task_forward_prev(F&&, AdapterChain&&)
134 requires detail::member_bind_callable<F> &&
135 detail::adapter_chain_like<AdapterChain> {
136 static_assert(
138 "yorch::task_forward_prev(...) does not support member function pointers in v1.");
139}
140
141template <typename F>
142// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
143constexpr void task_member(F&&)
144 requires detail::ordinary_member_bind_callable<F> {
145 static_assert(
147 "yorch::task_member(...) requires an explicit receiver binding as its second argument.");
148}
149
150template <typename F, typename AdapterChain>
151// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
152constexpr void task_member(F&&, AdapterChain&&)
153 requires detail::ordinary_member_bind_callable<F> &&
154 detail::adapter_chain_like<AdapterChain> {
155 static_assert(
157 "yorch::task_member(...) requires an explicit receiver binding as its second argument; pass adapters(...) as the third argument.");
158}
159
160template <typename F>
161// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
162constexpr void task_member(F&&)
163 requires detail::inferable_direct_output_member_callable<F> {
164 static_assert(
166 "yorch::task_member(...) requires an explicit receiver binding as its second argument; use yorch::task_into_member(...) for direct-output member functions.");
167}
168
169template <typename F, typename AdapterChain>
170// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
171constexpr void task_member(F&&, AdapterChain&&)
172 requires detail::inferable_direct_output_member_callable<F> &&
173 detail::adapter_chain_like<AdapterChain> {
174 static_assert(
176 "yorch::task_member(...) requires an explicit receiver binding as its second argument; use yorch::task_into_member(...) for direct-output member functions.");
177}
178
179template <typename F, typename ReceiverSpec>
180// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
181constexpr void task_member(F&&, ReceiverSpec&&)
182 requires detail::inferable_direct_output_member_callable<F> {
183 static_assert(
185 "yorch::task_member(...) received a direct-output member function whose last parameter is yorch::direct_out<T>; use yorch::task_into_member(...) instead.");
186}
187
188template <typename F, typename ReceiverSpec, typename AdapterChain>
189// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
190constexpr void task_member(F&&, ReceiverSpec&&, AdapterChain&&)
191 requires detail::inferable_direct_output_member_callable<F> &&
192 detail::adapter_chain_like<AdapterChain> {
193 static_assert(
195 "yorch::task_member(...) received a direct-output member function whose last parameter is yorch::direct_out<T>; use yorch::task_into_member(...) instead.");
196}
197
198template <typename F>
199// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
200constexpr void task_forward_prev_member(F&&)
201 requires detail::ordinary_member_bind_callable<F> {
202 static_assert(
204 "yorch::task_forward_prev_member(...) requires an explicit receiver binding as its second argument.");
205}
206
207template <typename F, typename AdapterChain>
208// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
209constexpr void task_forward_prev_member(F&&, AdapterChain&&)
210 requires detail::ordinary_member_bind_callable<F> &&
211 detail::adapter_chain_like<AdapterChain> {
212 static_assert(
214 "yorch::task_forward_prev_member(...) requires an explicit receiver binding as its second argument; pass adapters(...) as the third argument.");
215}
216
217template <typename F>
218// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
219constexpr void task_forward_prev_member(F&&)
220 requires detail::inferable_direct_output_member_callable<F> {
221 static_assert(
223 "yorch::task_forward_prev_member(...) requires an explicit receiver binding as its second argument; use yorch::task_into_member(...) for direct-output member functions.");
224}
225
226template <typename F, typename AdapterChain>
227// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
228constexpr void task_forward_prev_member(F&&, AdapterChain&&)
229 requires detail::inferable_direct_output_member_callable<F> &&
230 detail::adapter_chain_like<AdapterChain> {
231 static_assert(
233 "yorch::task_forward_prev_member(...) requires an explicit receiver binding as its second argument; use yorch::task_into_member(...) for direct-output member functions.");
234}
235
236template <typename F, typename ReceiverSpec>
237// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
238constexpr void task_forward_prev_member(F&&, ReceiverSpec&&)
239 requires detail::inferable_direct_output_member_callable<F> {
240 static_assert(
242 "yorch::task_forward_prev_member(...) received a direct-output member function whose last parameter is yorch::direct_out<T>; use yorch::task_into_member(...) instead.");
243}
244
245template <typename F, typename ReceiverSpec, typename AdapterChain>
246// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
247constexpr void task_forward_prev_member(F&&, ReceiverSpec&&, AdapterChain&&)
248 requires detail::inferable_direct_output_member_callable<F> &&
249 detail::adapter_chain_like<AdapterChain> {
250 static_assert(
252 "yorch::task_forward_prev_member(...) received a direct-output member function whose last parameter is yorch::direct_out<T>; use yorch::task_into_member(...) instead.");
253}
254
255template <typename F>
256// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
257constexpr void task_into_member(F&&)
258 requires detail::inferable_direct_output_member_callable<F> {
259 static_assert(
261 "yorch::task_into_member(...) requires an explicit receiver binding as its second argument.");
262}
263
264template <typename F, typename AdapterChain>
265// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
266constexpr void task_into_member(F&&, AdapterChain&&)
267 requires detail::inferable_direct_output_member_callable<F> &&
268 detail::adapter_chain_like<AdapterChain> {
269 static_assert(
271 "yorch::task_into_member(...) requires an explicit receiver binding as its second argument; pass adapters(...) as the third argument.");
272}
273
274template <typename F>
275// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
276constexpr void task_into_member(F&&)
277 requires detail::ordinary_member_bind_callable<F> {
278 static_assert(
280 "yorch::task_into_member(...) requires an explicit receiver binding as its second argument; use yorch::task_member(...) for ordinary member functions.");
281}
282
283template <typename F, typename AdapterChain>
284// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
285constexpr void task_into_member(F&&, AdapterChain&&)
286 requires detail::ordinary_member_bind_callable<F> &&
287 detail::adapter_chain_like<AdapterChain> {
288 static_assert(
290 "yorch::task_into_member(...) requires an explicit receiver binding as its second argument; use yorch::task_member(...) for ordinary member functions.");
291}
292
293template <typename F, typename ReceiverSpec>
294// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
295constexpr void task_into_member(F&&, ReceiverSpec&&)
296 requires detail::ordinary_member_bind_callable<F> {
297 static_assert(
299 "yorch::task_into_member(...) requires a member function whose last parameter is yorch::direct_out<T>; use yorch::task_member(...) for ordinary member functions.");
300}
301
302template <typename F, typename ReceiverSpec, typename AdapterChain>
303// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
304constexpr void task_into_member(F&&, ReceiverSpec&&, AdapterChain&&)
305 requires detail::ordinary_member_bind_callable<F> &&
306 detail::adapter_chain_like<AdapterChain> {
307 static_assert(
309 "yorch::task_into_member(...) requires a member function whose last parameter is yorch::direct_out<T>; use yorch::task_member(...) for ordinary member functions.");
310}
311
312template <typename F>
313// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
314constexpr void task_into(F&&)
315 requires detail::member_bind_callable<F> {
316 static_assert(
318 "yorch::task_into(...) does not accept member function pointers; use bind_into_member(...) first.");
319}
320
321template <typename F, typename AdapterChain>
322// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
323constexpr void task_into(F&&, AdapterChain&&)
324 requires detail::ordinary_bind_callable<F> &&
325 detail::adapter_chain_like<AdapterChain> {
326 static_assert(
328 "yorch::task_into(...) requires a callable whose last parameter is yorch::direct_out<T>; use yorch::task(...) for ordinary tasks.");
329}
330
331template <typename F, typename AdapterChain>
332// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
333constexpr void task_into(F&&, AdapterChain&&)
334 requires detail::member_bind_callable<F> &&
335 detail::adapter_chain_like<AdapterChain> {
336 static_assert(
338 "yorch::task_into(...) does not accept member function pointers; use bind_into_member(...) first.");
339}
340
341} // namespace yorch
constexpr bool is_adapter_descriptor_v
Definition adapters.hpp:63
constexpr auto task_member(F &&f, ReceiverSpec &&receiver_spec)
Definition core.hpp:229
constexpr auto task_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec)
Definition core.hpp:306
constexpr auto task_forward_prev(F &&f)
Definition core.hpp:284
constexpr auto task_into_member(F &&f, ReceiverSpec &&receiver_spec)
Definition core.hpp:339
constexpr auto task(F &&f)
Definition core.hpp:207
constexpr auto task_into(F &&f)
Definition core.hpp:262