14 struct GetCompletionSignaturesFunction {
15 template<
typename Sender,
typename Env>
16 requires(concepts::TagInvocable<GetCompletionSignaturesFunction, Sender, Env> ||
17 requires {
typename meta::RemoveCVRef<Sender>::CompletionSignatures; } ||
18 concepts::IsAwaitable<Sender, EnvPromise<Env>>)
19 constexpr auto operator()(
Sender&&,
Env&&)
const {
23 concepts::InstanceOf<Result, types::CompletionSignatures>,
24 "A customized get_completion_signatures() must return an instance of di::CompletionSignatures.");
26 }
else if constexpr (
requires {
typename meta::RemoveCVRef<Sender>::CompletionSignatures; }) {
27 using Result = meta::RemoveCVRef<Sender>::CompletionSignatures;
29 concepts::InstanceOf<Result, types::CompletionSignatures>,
30 "A sender's CompletionSignatures typedef must be an instance of di::CompletionSignatures.");
32 }
else if constexpr (concepts::IsAwaitable<Sender, EnvPromise<Env>>) {
33 if constexpr (concepts::LanguageVoid<meta::AwaitResult<Sender, EnvPromise<Env>>>) {
34 return types::CompletionSignatures<SetValue(), SetError(
Error), SetStopped()> {};
36 return types::CompletionSignatures<SetValue(
meta::AwaitResult<Sender, EnvPromise<Env>>),
37 SetError(
Error), SetStopped()> {};
meta::Type< SenderT< meta::RemoveCVRef< Send >, meta::Decay< Shape >, meta::Decay< Function > > > Sender
Definition bulk.h:155
MakeEnv< EmptyEnv, With< Tag< get_stop_token >, StopToken > > Env
Definition ensure_started.h:52
constexpr auto get_completion_signatures
Definition get_completion_signatures.h:44
Expected< T, Error > Result
Definition result.h:8
StatusCode< Erased< long > > Error
Definition error.h:8