14 struct ConnectFunction;
16 template<
typename Sender,
typename Receiver>
17 concept CustomConnect =
18 concepts::Sender<Sender> &&
19 concepts::ReceiverOf<Receiver, meta::CompletionSignaturesOf<Sender, meta::EnvOf<Receiver>>> &&
20 concepts::TagInvocable<ConnectFunction, Sender, Receiver>;
22 template<
typename Sender,
typename Receiver>
23 concept AwaitableConnect =
requires(
Sender&& sender,
Receiver&& receiver) {
27 struct ConnectFunction {
28 template<
typename Sender,
typename Receiver>
29 requires(CustomConnect<Sender, Receiver> || AwaitableConnect<Sender, Receiver> ||
30 concepts::DebugEnv<meta::EnvOf<Receiver>>)
31 constexpr auto operator()(
Sender&& sender,
Receiver&& receiver)
const -> concepts::OperationState
auto {
32 if constexpr (CustomConnect<Sender, Receiver>) {
33 return function::tag_invoke(*
this, util::forward<Sender>(sender), util::forward<Receiver>(receiver));
34 }
else if constexpr (AwaitableConnect<Sender, Receiver>) {
36 util::forward<Receiver>(receiver));
42constexpr inline auto connect = detail::ConnectFunction {};
meta::Type< ReceiverT< meta::Decay< Shape >, meta::Decay< Function >, meta::Decay< Rec > > > Receiver
Definition bulk.h:80
meta::Type< SenderT< meta::RemoveCVRef< Send >, meta::Decay< Shape >, meta::Decay< Function > > > Sender
Definition bulk.h:155
constexpr auto connect_awaitable
Definition connect_awaitable.h:173
constexpr auto connect
Definition connect.h:42
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22