Created on 2025-08-31.00:00:00 last changed 2 days ago
Proposed resolution:
This wording is relative to N5014.
Modify [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 from `exception`.
The following has been reported by Trevor Gray:
In [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 from `exception`.
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`.
For `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>.
History | |||
---|---|---|---|
Date | User | Action | Args |
2025-09-15 15:26:59 | admin | set | messages: + msg15055 |
2025-08-31 00:00:00 | admin | create |