This page is a snapshot from the LWG issues list, see theLibrary Active Issues List for more information and the meaning ofTC1 status.
Section: 26.7.3[alg.swap]Status:TC1Submitter: Dave AbrahamsOpened: 2000-04-09Last modified: 2016-01-28
Priority:Not Prioritized
View all otherissues in [alg.swap].
View all issues withTC1 status.
Discussion:
25.2.2 reads:
template<class T> void swap(T& a, T& b);
Requires: Type T is Assignable (_lib.container.requirements_).
Effects: Exchanges values stored in two locations.
The only reasonable** generic implementation of swap requires construction of a new temporary copy of one of its arguments:
template<class T> void swap(T& a, T& b); { T tmp(a); a = b; b = tmp; }But a type which is only Assignable cannot be swapped by this implementation.
**Yes, there's also an unreasonable implementation which would require T to be DefaultConstructible instead of CopyConstructible. I don't think this is worthy of consideration:
template<class T> void swap(T& a, T& b);{ T tmp; tmp = a; a = b; b = tmp;}Proposed resolution:
Change 25.2.2 paragraph 1 from:
Requires: Type T is Assignable (23.1).
to:
Requires: Type T is CopyConstructible (20.1.3) and Assignable (23.1)