Ich habe Schwierigkeiten zu verstehen, warum direkter Aufruf von std :: swap() in unter Code einen Kompilierungsfehler ergibt, während die Verwendung von std :: iter_swap kompiliert ohne irgendein Fehler.std :: iter_swap erfordert ValueSwappable args vs std :: swap erfordert Move Assignable args
Von iter_swap() versus swap() -- what's the difference?, ruft Iter_swap schließlich std :: swap, aber immer noch ihr Verhalten ist anders.
#include <iostream>
#include <vector>
class IntVector {
std::vector<int> v;
IntVector& operator=(IntVector); // not assignable
public:
void swap(IntVector& other) {
v.swap(other.v);
}
};
void swap(IntVector& v1, IntVector& v2) {
v1.swap(v2);
}
int main()
{
IntVector v1, v2;
// std::swap(v1, v2); // compiler error! std::swap requires MoveAssignable
std::iter_swap(&v1, &v2); // OK: library calls unqualified swap()
}
Quelle: http://en.cppreference.com/w/cpp/concept/Swappable – sbhal