The receiver_of concept defines
the requirements for a receiver type that is usable as
the first argument of a set of completion operations
corresponding to a set of completion signatures.
The get_env customization point object is used to access
a receiver's associated environment.
namespace std::execution {template<class Rcvr>conceptreceiver=derived_from<typename remove_cvref_t<Rcvr>::receiver_concept, receiver_t>&&requires(const remove_cvref_t<Rcvr>& rcvr){{ get_env(rcvr)}->queryable;
}&&move_constructible<remove_cvref_t<Rcvr>>&&// rvalues are movable, andconstructible_from<remove_cvref_t<Rcvr>, Rcvr>; // lvalues are copyabletemplate<class Signature, class Rcvr>conceptvalid-completion-for=requires(Signature* sig){[]<class Tag, class... Args>(Tag(*)(Args...))requirescallable<Tag, remove_cvref_t<Rcvr>, Args...>{}(sig);
};
template<class Rcvr, class Completions>concepthas-completions=requires(Completions* completions){[]<valid-completion-for<Rcvr>...Sigs>(completion_signatures<Sigs...>*){}(completions);
};
template<class Rcvr, class Completions>conceptreceiver_of=receiver<Rcvr>&&has-completions<Rcvr, Completions>;
}
This means that, unless it knows about further guarantees
provided by the type of rcvr,
the implementation of op_state cannot use token
after it executes a completion operation.
This also implies that any stop callbacks registered on token
must be destroyed before the invocation of the completion operation.
The expression set_value(rcvr, vs...)
for a subexpression rcvr and
pack of subexpressions vs is ill-formed
if rcvr is an lvalue or an rvalue of const type.
Otherwise, it is expression-equivalent to
MANDATE-NOTHROW(rcvr.set_value(vs...)).