This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of Resolved status.

### 2856. `std::async` should be marked as `[[nodiscard]]`

Section: 32.9.9 [futures.async] Status: Resolved Submitter: Andrey Davydov Opened: 2017-01-20 Last modified: 2020-09-06

Priority: 2

View other active issues in [futures.async].

View all other issues in [futures.async].

View all issues with Resolved status.

Discussion:

Because the destructor of the `std::future` returned from the `std::async` blocks until the asynchronous operation completes, discarding the `std::async` return value leads to the synchronous code execution, which is pointless. For example, in the following code

>     void task1();
>     void task2();

>     void foo()
>     {
>       std::async(std::launch::async,  task1),
>       std::async(std::launch::async,  task2);
>     }

>     void bar()
>     {
>       std::async(std::launch::async,  task1);
>       std::async(std::launch::async,  task2);
>     }

`task1` and `task2` will be concurrently executed in the function 'foo', but sequentially in the function 'bar'.

[2017-01-27 Telecon]

Priority 2; Nico to provide wording.

[2017-03-04, Kona]

This should be handled by Nico's paper P0600.

Proposed resolution:

Resolved by adoption of P0600 in Albuquerque