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: