This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
check-types
function for upon_error
and upon_stopped
is wrongSection: 33.9.12.9 [exec.then] Status: New Submitter: Eric Niebler Opened: 2025-08-31 Last modified: 2025-09-15
Priority: Not Prioritized
View all issues with New status.
Discussion:
The following has been reported by Trevor Gray:
In 33.9.12.9 [exec.then] p5, the impls-for<decayed-typeof<then-cpo>>::check-types
unction is specified as follows:
template<class Sndr, class... Env> static consteval void check-types();Effects: Equivalent to:
auto cs = get_completion_signatures<child-type<Sndr>, FWD-ENV-T(Env)...>(); auto fn = []<class... Ts>(set_value_t(*)(Ts...)) { if constexpr (!invocable<remove_cvref_t<data-type<Sndr>>, Ts...>) throw unspecified-exception(); }; cs.for-each(overload-set{fn, [](auto){}});where
unspecified-exception
is a type derived fromexception
.
The line auto fn = []<class... Ts>(set_value_t(*)(Ts...)) {
is correct when then-cpo
is then
but not when it is upon_error
or upon_stopped
.
upon_error
it should be:
auto fn = []<class... Ts>(set_error_t(*)(Ts...)) {
and for upon_stopped
it should be:
auto fn = []<class... Ts>(set_stopped_t(*)(Ts...)) {
We can achieve that by replacing set_value_t
in the problematic line with decayed-typeof<set-cpo>
.
Proposed resolution:
This wording is relative to N5014.
Modify 33.9.12.9 [exec.then] as indicated:
template<class Sndr, class... Env> static consteval void check-types();-5- Effects: Equivalent to:
auto cs = get_completion_signatures<child-type<Sndr>, FWD-ENV-T(Env)...>(); auto fn = []<class... Ts>(set_value_tdecayed-typeof<set-cpo>(*)(Ts...)) { if constexpr (!invocable<remove_cvref_t<data-type<Sndr>>, Ts...>) throw unspecified-exception(); }; cs.for-each(overload-set{fn, [](auto){}});where
unspecified-exception
is a type derived fromexception
.