Created on 2000-04-09.00:00:00 last changed 183 months ago
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)
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;
}
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2010-10-21 18:28:33 | admin | set | messages: + msg1924 |
| 2000-04-09 00:00:00 | admin | create | |