11 requires detail::inferable_direct_output_callable<F> {
14 "yorch::task(...) received a direct-output callable whose last parameter is yorch::direct_out<T>; use yorch::task_into(...) instead.");
20 requires detail::member_bind_callable<F> {
23 "yorch::task(...) does not accept member function pointers; use bind_member(...) first.");
26template <
typename Task>
29 requires detail::bind_task_object<Task> &&
30 detail::task_uses_direct_output_protocol_v<Task> {
33 "yorch::task(...) does not accept prebuilt direct-output tasks; pass them directly to root_into(...) or node_into<Level>(...) instead.");
36template <
typename F,
typename AdapterChain>
38constexpr void task(F&&, AdapterChain&&)
39 requires detail::inferable_direct_output_callable<F> &&
40 detail::adapter_chain_like<AdapterChain> {
43 "yorch::task(...) received a direct-output callable whose last parameter is yorch::direct_out<T>; use yorch::task_into(...) instead.");
46template <
typename F,
typename AdapterChain>
48constexpr void task(F&&, AdapterChain&&)
49 requires detail::member_bind_callable<F> &&
50 detail::adapter_chain_like<AdapterChain> {
53 "yorch::task(...) does not accept member function pointers; use bind_member(...) first.");
56template <
typename Task>
59 requires detail::bind_task_object<Task> {
62 "yorch::task_into(...) only accepts a callable whose last parameter is yorch::direct_out<T>; pass prebuilt tasks directly to root/node instead.");
65template <
typename Task,
typename AdapterChain>
68 requires detail::bind_task_object<Task> &&
69 detail::adapter_chain_like<AdapterChain> {
72 "yorch::task_into(...) only accepts a callable whose last parameter is yorch::direct_out<T>; pass prebuilt tasks directly to root/node instead.");
78 requires detail::ordinary_bind_callable<F> {
81 "yorch::task_into(...) requires a callable whose last parameter is yorch::direct_out<T>; use yorch::task(...) for ordinary tasks.");
84template <
typename Task>
87 requires detail::bind_task_object<Task> {
90 "yorch::task_forward_prev(...) only accepts a callable; pass prebuilt tasks directly to root/node instead.");
93template <
typename Task,
typename AdapterChain>
96 requires detail::bind_task_object<Task> &&
97 detail::adapter_chain_like<AdapterChain> {
100 "yorch::task_forward_prev(...) only accepts a callable; pass prebuilt tasks directly to root/node instead.");
106 requires detail::inferable_direct_output_callable<F> {
109 "yorch::task_forward_prev(...) does not accept callables with yorch::direct_out<T>; use yorch::task_into(...) for direct-output materialization.");
112template <
typename F,
typename AdapterChain>
115 requires detail::inferable_direct_output_callable<F> &&
116 detail::adapter_chain_like<AdapterChain> {
119 "yorch::task_forward_prev(...) does not accept callables with yorch::direct_out<T>; use yorch::task_into(...) for direct-output materialization.");
125 requires detail::member_bind_callable<F> {
128 "yorch::task_forward_prev(...) does not support member function pointers in v1.");
131template <
typename F,
typename AdapterChain>
134 requires detail::member_bind_callable<F> &&
135 detail::adapter_chain_like<AdapterChain> {
138 "yorch::task_forward_prev(...) does not support member function pointers in v1.");
144 requires detail::ordinary_member_bind_callable<F> {
147 "yorch::task_member(...) requires an explicit receiver binding as its second argument.");
150template <
typename F,
typename AdapterChain>
153 requires detail::ordinary_member_bind_callable<F> &&
154 detail::adapter_chain_like<AdapterChain> {
157 "yorch::task_member(...) requires an explicit receiver binding as its second argument; pass adapters(...) as the third argument.");
163 requires detail::inferable_direct_output_member_callable<F> {
166 "yorch::task_member(...) requires an explicit receiver binding as its second argument; use yorch::task_into_member(...) for direct-output member functions.");
169template <
typename F,
typename AdapterChain>
172 requires detail::inferable_direct_output_member_callable<F> &&
173 detail::adapter_chain_like<AdapterChain> {
176 "yorch::task_member(...) requires an explicit receiver binding as its second argument; use yorch::task_into_member(...) for direct-output member functions.");
179template <
typename F,
typename ReceiverSpec>
182 requires detail::inferable_direct_output_member_callable<F> {
185 "yorch::task_member(...) received a direct-output member function whose last parameter is yorch::direct_out<T>; use yorch::task_into_member(...) instead.");
188template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
191 requires detail::inferable_direct_output_member_callable<F> &&
192 detail::adapter_chain_like<AdapterChain> {
195 "yorch::task_member(...) received a direct-output member function whose last parameter is yorch::direct_out<T>; use yorch::task_into_member(...) instead.");
201 requires detail::ordinary_member_bind_callable<F> {
204 "yorch::task_forward_prev_member(...) requires an explicit receiver binding as its second argument.");
207template <
typename F,
typename AdapterChain>
210 requires detail::ordinary_member_bind_callable<F> &&
211 detail::adapter_chain_like<AdapterChain> {
214 "yorch::task_forward_prev_member(...) requires an explicit receiver binding as its second argument; pass adapters(...) as the third argument.");
220 requires detail::inferable_direct_output_member_callable<F> {
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.");
226template <
typename F,
typename AdapterChain>
229 requires detail::inferable_direct_output_member_callable<F> &&
230 detail::adapter_chain_like<AdapterChain> {
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.");
236template <
typename F,
typename ReceiverSpec>
239 requires detail::inferable_direct_output_member_callable<F> {
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.");
245template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
248 requires detail::inferable_direct_output_member_callable<F> &&
249 detail::adapter_chain_like<AdapterChain> {
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.");
258 requires detail::inferable_direct_output_member_callable<F> {
261 "yorch::task_into_member(...) requires an explicit receiver binding as its second argument.");
264template <
typename F,
typename AdapterChain>
267 requires detail::inferable_direct_output_member_callable<F> &&
268 detail::adapter_chain_like<AdapterChain> {
271 "yorch::task_into_member(...) requires an explicit receiver binding as its second argument; pass adapters(...) as the third argument.");
277 requires detail::ordinary_member_bind_callable<F> {
280 "yorch::task_into_member(...) requires an explicit receiver binding as its second argument; use yorch::task_member(...) for ordinary member functions.");
283template <
typename F,
typename AdapterChain>
286 requires detail::ordinary_member_bind_callable<F> &&
287 detail::adapter_chain_like<AdapterChain> {
290 "yorch::task_into_member(...) requires an explicit receiver binding as its second argument; use yorch::task_member(...) for ordinary member functions.");
293template <
typename F,
typename ReceiverSpec>
296 requires detail::ordinary_member_bind_callable<F> {
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.");
302template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
305 requires detail::ordinary_member_bind_callable<F> &&
306 detail::adapter_chain_like<AdapterChain> {
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.");
315 requires detail::member_bind_callable<F> {
318 "yorch::task_into(...) does not accept member function pointers; use bind_into_member(...) first.");
321template <
typename F,
typename AdapterChain>
324 requires detail::ordinary_bind_callable<F> &&
325 detail::adapter_chain_like<AdapterChain> {
328 "yorch::task_into(...) requires a callable whose last parameter is yorch::direct_out<T>; use yorch::task(...) for ordinary tasks.");
331template <
typename F,
typename AdapterChain>
334 requires detail::member_bind_callable<F> &&
335 detail::adapter_chain_like<AdapterChain> {
338 "yorch::task_into(...) does not accept member function pointers; use bind_into_member(...) first.");
constexpr bool is_adapter_descriptor_v
constexpr auto task_member(F &&f, ReceiverSpec &&receiver_spec)
constexpr auto task_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec)
constexpr auto task_forward_prev(F &&f)
constexpr auto task_into_member(F &&f, ReceiverSpec &&receiver_spec)
constexpr auto task(F &&f)
constexpr auto task_into(F &&f)