名前付き要件: ValueSwappable
提供: cppreference.com
この型の2つのオブジェクトは逆参照可能であり、その結果の値は std::swap とユーザ定義の swap() が可視な文脈における非修飾の関数呼び出し swap() を用いてスワップ可能です。
[編集] 要件
以下の内容を満たす場合、型 T
は ValueSwappable を満たします。
多くの標準ライブラリ関数は ValueSwappable を満たす引数を期待します。 これは、標準ライブラリが swap を行うときは using std::swap; swap(*iter1, *iter2); と同等なコードを使用することを意味します。
[編集] 例
Run this code
#include <iostream> #include <vector> class IntVector { std::vector<int> v; IntVector& operator=(IntVector); // 代入可能でない public: void swap(IntVector& other) { v.swap(other.v); } }; void swap(IntVector& v1, IntVector& v2) { v1.swap(v2); } int main() { IntVector v1, v2; // IntVector は Swappable ですが MoveAssignable ではありません。 IntVector* p1 = &v1; IntVector* p2 = &v2; // IntVector* は ValueSwappable です。 std::iter_swap(p1, p2); // OK、 iter_swap は ValueSwappable を���求します。 // std::swap(v1, v2); // コンパイルエラー、 std::swap は MoveAssignable を要求します。 }