917. Redundant move-assignment operator of tuple should be removed

Section: 22.4.4.2 [tuple.cnstr] Status: NAD Submitter: Daniel Krügler Opened: 2008-10-04 Last modified: 2016-01-28

Priority: Not Prioritized

View other active issues in [tuple.cnstr].

View all other issues in [tuple.cnstr].

View all issues with NAD status.

Discussion:

see also 916.

N2770 (and thus now the WP) removed the non-template move-assignment operator from tuple's class definition, but the latter individual member description does still provide this operator. Is this (a) an oversight and can it (b) be solved as part of an editorial process?

[ Post Summit Daniel provided wording. ]

[ Batavia (2009-05): ]

We believe that the proposed resolution's part 1 is editorial.

Regarding part 2, we either remove the specification as proposed, or else add back the declaration to which the specification refers. Alisdair and Bill prefer the latter. It is not immediately obvious whether the function is intended to be present.

We recommend that the Project Editor restore the missing declaration and that we keep part 2 of the issue alive.

Move to Open.

[ 2009-07 Frankfurt: ]

Leave this open pending the removal of concepts from the WD.

[ 2009-10 Santa Cruz: ]

Mark as NAD, see issue 801.

Proposed resolution:

  1. In 22.4.4 [tuple.tuple], class tuple just before member swap please change as indicated:

    [ This fixes an editorial loss between N2798 to N2800 ]

    template <class... UTypes>
    requires HasAssign<Types, const UTypes&>...
    tuple& operator=(const pair<UTypes...>&);
    
    template <class... UTypes>
    requires HasAssign<Types, RvalueOf<UTypes>::type>...
    tuple& operator=(pair<UTypes...>&&);
    
  2. In 22.4.4.2 [tuple.cnstr], starting just before p. 11 please remove as indicated:

    requires MoveAssignable<Types>... tuple& operator=(tuple&& u);
    

    -11- Effects: Move-assigns each element of u to the corresponding element of *this.

    -12- Returns: *this.