是否仍然可以通过在C++ 0x中包含算法来定义std :: swap?

fre*_*low 11 c++ swap header-files c++-standard-library c++11

swap函数模板是从移动<algorithm><utility>C++ 0x中.前者是否在C++ 0x中包含后者?或者它们都包含一个共同的标题定义swap

换句话说,以下代码是否保证在C++ 0x中编译?

#include <algorithm>   // will this pull in std::swap?

// ...

using std::swap;
swap(a, b);
Run Code Online (Sandbox Code Playgroud)

Ste*_*sop 15

FDIS(n3290),附件C,"兼容性",C.2.7说:

17.6.3.2

影响原始功能:功能交换移动到不同的标题

基本原理:删除对<algorithm>的依赖关系以进行交换.

对原始功能的影响:编译的有效C++ 2003代码期望交换在<algorithm>中,可能必须包含<utility>.

所以不,它不能保证编译,这是故意改变.单个实现是否真的会破坏C++ 03代码是另一回事.正如你所指出的那样,swap通过任一标题定义它们都不容易.但是可以选择将C++ 03代码移植到C++ 0x,以及帮助人们严格遵守C++ 0x.