Each algorithm has a default implementation
. Let
sndr be the result of an invocation of such an algorithm or
an object equal to the result (
[concepts.equality]), and
let
Sndr be
decltype((sndr)). Let
rcvr be a receiver of type
Rcvr
with associated environment
env of type
Env
such that
sender_to<Sndr, Rcvr> is
true. For the default implementation of the algorithm that produced
sndr,
connecting
sndr to
rcvr and
starting the resulting operation state (
[exec.async.ops])
necessarily results in the potential evaluation (
[basic.def.odr]) of
a set of completion operations
whose first argument is a subexpression equal to
rcvr. Let
Sigs be a pack of completion signatures corresponding to
this set of completion operations, and
let
CS be
the type of the expression
get_completion_signatures<Sndr, Env>(). Then
CS is
a specialization of
the class template
completion_signatures (
[exec.cmplsig]),
the set of whose template arguments is
Sigs. If none of the types in
Sigs are dependent on the type
Env, then
the expression
get_completion_signatures<Sndr>() is well-formed and
its type is
CS. If a user-provided implementation of the algorithm
that produced sndr is selected instead of the default: