2025. Incorrect semantics of move assignment operator of packaged_task

Section: 32.10.10.2 [futures.task.members] Status: Resolved Submitter: Daniel Krügler Opened: 2010-12-08 Last modified: 2016-01-28

Priority: Not Prioritized

View other active issues in [futures.task.members].

View all other issues in [futures.task.members].

View all issues with Resolved status.

Discussion:

According to 32.10.10.2 [futures.task.members] p. 7 bullet 2:

packaged_task& operator=(packaged_task&& other);

7 Effects:

The argument other given to the move constructor is an lvalue and must be converted into an rvalue via appropriate usage of std::move.

Proposed Resolution

The suggested wording changes are against the working draft N3242.

  1. Change 32.10.10.2 [futures.task.members] p. 7 bullet 2 as indicated:

    packaged_task& operator=(packaged_task&& other);
    

    7 Effects:

    • [...]

    • packaged_task(std::move(other)).swap(*this).

Proposed resolution:

Resolved 2011-03 Madrid meeting by paper N3278