Cors 11上的Torsten T. Will的教科书说,自C++ 11以来,如果定义了这样的非成员函数,std::swap
将使用swap
ADL找到的非成员,因此模式
using std::swap; swap (obj1, obj2);
总是可以用简单的代替
std::swap (obj1, obj2);
不幸的是,我没有在其他任何地方找到这样的声明.
真相是什么?
从C++ 14(或更具体地说是N4140):
要求:类型
T
应为MoveConstructible(表20)和MoveAssignable(表22). 效果:交换存储在两个位置的值.
这里没有任何关于召集非会员的信息swap
.所以不,没有std::swap
通过非成员实施的保证swap
.
目前还不完全清楚是否允许实现std::swap
用户定义的非成员ADL swap
.