2025. Incorrect semantics of move assignment operator of packaged_task

Section: 33.6.10.1 [futures.task.members] Status: Resolved Submitter: Daniel Krügler Opened: 2010-12-08 Last modified: 2016-02-10

Priority: Not Prioritized

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

View all issues with Resolved status.

Discussion:

According to 33.6.10.1 [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 33.6.10.1 [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