|
1185 | 1185 | { get_env(rcvr) } -> @\exposconcept{queryable}@; |
1186 | 1186 | } && |
1187 | 1187 | @\libconcept{move_constructible}@<remove_cvref_t<Rcvr>> && // rvalues are movable, and |
1188 | | - @\libconcept{constructible_from}@<remove_cvref_t<Rcvr>, Rcvr>; // lvalues are copyable |
| 1188 | + @\libconcept{constructible_from}@<remove_cvref_t<Rcvr>, Rcvr> && // lvalues are copyable |
| 1189 | + is_nothrow_move_constructible_v<remove_cvref_t<Rcvr>>; |
1189 | 1190 |
|
1190 | 1191 | template<class Signature, class Rcvr> |
1191 | 1192 | concept @\defexposconcept{valid-completion-for}@ = // \expos |
|
2856 | 2857 | Otherwise, \tcode{\exposid{connect-awaitable}(new_sndr, rcvr)}. |
2857 | 2858 | \end{itemize} |
2858 | 2859 | Except that \tcode{rcvr} is evaluated only once. |
| 2860 | +The program is ill-formed, no diagnostic required |
| 2861 | +if there exists an rvalue expression \tcode{rcvr2} such that: |
| 2862 | +\begin{itemize} |
| 2863 | +\item \tcode{decltype(rcvr2)} models \libconcept{receiver}, |
| 2864 | +\item \tcode{noexcept(rcvr2)} is \tcode{true}, |
| 2865 | +\item \tcode{is_same_v<decltype(get_env(rcvr2)), decltype(get_env(rcvr))>} is \tcode{true}, |
| 2866 | +\item \tcode{noexcept(execution::connect(sndr, rcvr))} is \tcode{true}, and |
| 2867 | +\item \tcode{noexcept(execution::connect(sndr, rcvr2))} |
| 2868 | +is well-formed and evaluates to \tcode{false}. |
| 2869 | +\end{itemize} |
| 2870 | +\begin{note} |
| 2871 | +This allows determination of whether \tcode{connect} throws |
| 2872 | +with only the context of the environment, |
| 2873 | +such as within \tcode{get_completion_signatures}. |
| 2874 | +\end{note} |
2859 | 2875 |
|
2860 | 2876 | \mandates |
2861 | 2877 | The following are \tcode{true}: |
|
0 commit comments