From b4faca51b04055fa9a55e354696553345b66ceaf Mon Sep 17 00:00:00 2001 From: Eisenwave Date: Fri, 14 Nov 2025 19:53:10 +0100 Subject: [PATCH 1/2] =?UTF-8?q?P3388R3=20When=20Do=20You=20Know=20connect?= =?UTF-8?q?=20Doesn=E2=80=99t=20Throw=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes NB CA-334, FR-032-330, CA-329 (C++26 CD). --- source/exec.tex | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/exec.tex b/source/exec.tex index 6e99784a93..38039d45c2 100644 --- a/source/exec.tex +++ b/source/exec.tex @@ -1185,7 +1185,8 @@ { get_env(rcvr) } -> @\exposconcept{queryable}@; } && @\libconcept{move_constructible}@> && // rvalues are movable, and - @\libconcept{constructible_from}@, Rcvr>; // lvalues are copyable + @\libconcept{constructible_from}@, Rcvr> && // lvalues are copyable + is_nothrow_move_constructible_v>; template concept @\defexposconcept{valid-completion-for}@ = // \expos @@ -2856,6 +2857,21 @@ Otherwise, \tcode{\exposid{connect-awaitable}(new_sndr, rcvr)}. \end{itemize} Except that \tcode{rcvr} is evaluated only once. +The program is ill-formed, no diagnostic required +if there exists an rvalue expression \tcode{rcvr2} such that: +\begin{itemize} +\item \tcode{decltype(rcvr2)} models \libconcept{receiver}, +\item \tcode{noexcept(rcvr2)} is \tcode{true}, +\item \tcode{is_same_v} is \tcode{true}, +\item \tcode{noexcept(execution::connect(sndr, rcvr))} is \tcode{true}, and +\item \tcode{noexcept(execution::connect(sndr, rcvr2))} +is well-formed and evaluates to \tcode{false}. +\end{itemize} +\begin{note} +This allows determination of whether \tcode{connect} throws +with only the context of the environment, +such as within \tcode{get_completion_signatures}. +\end{note} \mandates The following are \tcode{true}: From 082ec3aa87f3b2ba5cc1f607e19bfc0fe74984b5 Mon Sep 17 00:00:00 2001 From: Eisenwave Date: Sat, 15 Nov 2025 19:20:05 +0100 Subject: [PATCH 2/2] Fixup: add comma for readability --- source/exec.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/exec.tex b/source/exec.tex index 38039d45c2..2ef05d770a 100644 --- a/source/exec.tex +++ b/source/exec.tex @@ -2857,7 +2857,7 @@ Otherwise, \tcode{\exposid{connect-awaitable}(new_sndr, rcvr)}. \end{itemize} Except that \tcode{rcvr} is evaluated only once. -The program is ill-formed, no diagnostic required +The program is ill-formed, no diagnostic required, if there exists an rvalue expression \tcode{rcvr2} such that: \begin{itemize} \item \tcode{decltype(rcvr2)} models \libconcept{receiver},