7#include "../../bind/builders.hpp"
13template <
typename BuilderStorage, std::
size_t Level,
typename FanoutPolicy>
19 template <
typename Self>
24 if constexpr (std::is_pointer_v<builder_storage_t>) {
33template <
typename BuilderStorage, std::
size_t Level,
typename F,
typename FanoutPolicy,
typename AdapterChain>
50 template <
typename Self,
typename Task>
52 if constexpr (std::is_same_v<FanoutPolicy, no_fanout_policy_tag>) {
58 std::forward<Task>(
task),
65 template <
typename...
Specs>
66 requires bind_signature_matches<
F,
Specs...>
68 return this->append_task(
73 template <
typename...
Specs>
76 return this->append_task(
82template <
typename BuilderStorage, std::
size_t Level,
typename F,
typename FanoutPolicy,
typename AdapterChain>
99 template <
typename Self,
typename Task>
101 if constexpr (std::is_same_v<FanoutPolicy, no_fanout_policy_tag>) {
107 std::forward<Task>(
task),
114 template <
typename...
Specs>
115 requires inferred_bind_into_signature_matches<
F,
Specs...>
117 return this->append_task(
122 template <
typename...
Specs>
125 return this->append_task(
131template <
typename BuilderStorage, std::
size_t Level,
typename F,
typename FanoutPolicy,
typename AdapterChain>
148 template <
typename Self,
typename Task>
150 if constexpr (std::is_same_v<FanoutPolicy, no_fanout_policy_tag>) {
156 std::forward<Task>(
task),
162 template <
typename...
Specs>
163 requires inferred_forward_prev_signature_matches<
F,
Specs...>
168 std::forward<Specs>(specs)...));
171 template <
typename...
Specs>
177 std::forward<Specs>(specs)...));
181template <
typename BuilderStorage, std::
size_t Level,
typename F,
typename ReceiverSpec,
typename FanoutPolicy,
typename AdapterChain>
201 template <
typename Self,
typename Task>
203 if constexpr (std::is_same_v<FanoutPolicy, no_fanout_policy_tag>) {
209 std::forward<Task>(
task),
215 template <
typename...
Specs>
216 requires member_bound_signature_matches<
F,
Specs...>
221 std::forward<Specs>(specs)...));
224 template <
typename...
Specs>
230 std::forward<Specs>(specs)...));
234template <
typename BuilderStorage, std::
size_t Level,
typename F,
typename ReceiverSpec,
typename FanoutPolicy,
typename AdapterChain>
254 template <
typename Self,
typename Task>
256 if constexpr (std::is_same_v<FanoutPolicy, no_fanout_policy_tag>) {
262 std::forward<Task>(
task),
268 template <
typename...
Specs>
269 requires member_bound_signature_matches<
F,
Specs...>
274 std::forward<Specs>(specs)...));
277 template <
typename...
Specs>
286 std::forward<Specs>(specs)...));
290template <
typename BuilderStorage, std::
size_t Level,
typename F,
typename ReceiverSpec,
typename FanoutPolicy,
typename AdapterChain>
310 template <
typename Self,
typename Task>
312 if constexpr (std::is_same_v<FanoutPolicy, no_fanout_policy_tag>) {
318 std::forward<Task>(
task),
324 template <
typename...
Specs>
325 requires inferred_member_bound_into_signature_matches<
F,
Specs...>
330 std::forward<Specs>(specs)...));
333 template <
typename...
Specs>
339 std::forward<Specs>(specs)...));
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)
FanoutPolicy fanout_policy
static constexpr decltype(auto) builder_ref(Self &&self)
AdapterChain adapter_specs
constexpr auto operator()(Specs &&... specs) &&
constexpr auto operator()(Specs &&... specs) const &
constexpr tree_node_binder(BuilderStorage builder, F func, FanoutPolicy fanout_policy, AdapterChain adapter_specs)
constexpr auto operator()(Specs &&... specs) &&
constexpr auto operator()(Specs &&... specs) const &
AdapterChain adapter_specs
constexpr tree_node_forward_prev_binder(BuilderStorage builder, F func, FanoutPolicy fanout_policy, AdapterChain adapter_specs)
AdapterChain adapter_specs
constexpr tree_node_forward_prev_member_receiver_binder(BuilderStorage builder, F func, ReceiverSpec receiver_spec, FanoutPolicy fanout_policy, AdapterChain adapter_specs)
constexpr auto operator()(Specs &&... specs) const &
constexpr auto operator()(Specs &&... specs) &&
ReceiverSpec receiver_spec
constexpr auto operator()(Specs &&... specs) &&
AdapterChain adapter_specs
constexpr tree_node_into_binder(BuilderStorage builder, F func, FanoutPolicy fanout_policy, AdapterChain adapter_specs)
constexpr auto operator()(Specs &&... specs) const &
constexpr auto operator()(Specs &&... specs) const &
ReceiverSpec receiver_spec
constexpr tree_node_into_member_receiver_binder(BuilderStorage builder, F func, ReceiverSpec receiver_spec, FanoutPolicy fanout_policy, AdapterChain adapter_specs)
constexpr auto operator()(Specs &&... specs) &&
AdapterChain adapter_specs
AdapterChain adapter_specs
ReceiverSpec receiver_spec
constexpr auto operator()(Specs &&... specs) &&
constexpr tree_node_member_receiver_binder(BuilderStorage builder, F func, ReceiverSpec receiver_spec, FanoutPolicy fanout_policy, AdapterChain adapter_specs)
constexpr auto operator()(Specs &&... specs) const &