However, this doesn't take into account the fact that the return-type of get-state might return a reference which is used to initialize a data-member of the decayed-returne type of get-state.
The state member of basic-state has type state-type<Sndr, Rcvr> which is defined as:
template<class Sndr, class Rcvr> // exposition only
using state-type = decay_t<call-result-t<
decltype(impls-for<tag_of_t<Sndr>>::get-state), Sndr, Rcvr&>>;
Therefore, the noexcept expression needs to take into account that Sndr might be a const-ref and that get-state therefore returns a const-ref (the default impl returns a reference to the data member of the Sndr object) and therefore needs to make a copy.
In P2300R10 [exec.snd.general] p3.14.6 it describes the noexcept clause expression for the basic-state constructor as:
However, this doesn't take into account the fact that the return-type of
get-state
might return a reference which is used to initialize a data-member of the decayed-returne type of get-state.The
state
member ofbasic-state
has typestate-type<Sndr, Rcvr>
which is defined as:Therefore, the noexcept expression needs to take into account that
Sndr
might be a const-ref and thatget-state
therefore returns a const-ref (the default impl returns a reference to thedata
member of theSndr
object) and therefore needs to make a copy.i.e. should be changed to something like: