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.

4346. task::promise_type::return_void/value lack a specification

Section: 33.13.6.5 [task.promise] Status: New Submitter: Dietmar Kühl Opened: 2025-09-01 Last modified: 2025-09-01

Priority: Not Prioritized

View other active issues in [task.promise].

View all other issues in [task.promise].

View all issues with New status.

Discussion:

The synopsis for std::execution::task<T, E>::promise_type declares return_void() or return_value(V&&). However, there is no specification of what these functions actually do. return_void() doesn’t need to do anything at all. return_value(V&& v) needs to store v into the result.

Proposed resolution:

Insert the following paragraphs in 33.13.6.5 [task.promise] after the specification of unhandled_stopped:

coroutine_handle<> unhandled_stopped();

-13- Effects: Completes the asynchronous operation associated with STATE(*this) by invoking set_stopped(std::move(RCVR(*this))).

-14- Returns: noop_coroutine().

void return_void();

-15- Effects: does nothing.


template<class V>
  void return_value(V&& v);

-16- Effects: Equivalent to result.emplace(std::forward<V>(v)).

unspecified get_env() const noexcept;

-157- Returns: An object env such that queries are forwarded as follows: