该 swap
功能模板已从中移除 <algorithm>
至 <utility>
在C ++ 0x中。前者是否在C ++ 0x中包含后者?或者它们都包含定义的公共头 swap
?
换句话说,以下代码是否保证在C ++ 0x中编译?
#include <algorithm> // will this pull in std::swap?
// ...
using std::swap;
swap(a, b);
该 swap
功能模板已从中移除 <algorithm>
至 <utility>
在C ++ 0x中。前者是否在C ++ 0x中包含后者?或者它们都包含定义的公共头 swap
?
换句话说,以下代码是否保证在C ++ 0x中编译?
#include <algorithm> // will this pull in std::swap?
// ...
using std::swap;
swap(a, b);
FDIS(n3290),附件C,“兼容性”,C.2.7说:
17.6.3.2
影响原始功能:功能交换移动到不同的功能 头
基本原理:删除对<algorithm>的依赖性以进行交换。
E ff ect 原始功能:已编译的有效C ++ 2003代码 交换到<algorithm>可能必须包含<utility>。
所以不,它不能保证编译,这是故意改变。单个实现是否真的会破坏C ++ 03代码是另一回事。正如你所指出的那样,通过定义,它们不容易 swap
通过任一标题。但是可以选择将C ++ 03代码更容易地移植到C ++ 0x,而不是帮助人们编写严格符合C ++ 0x的代码。
FDIS(n3290),附件C,“兼容性”,C.2.7说:
17.6.3.2
影响原始功能:功能交换移动到不同的功能 头
基本原理:删除对<algorithm>的依赖性以进行交换。
E ff ect 原始功能:已编译的有效C ++ 2003代码 交换到<algorithm>可能必须包含<utility>。
所以不,它不能保证编译,这是故意改变。单个实现是否真的会破坏C ++ 03代码是另一回事。正如你所指出的那样,通过定义,它们不容易 swap
通过任一标题。但是可以选择将C ++ 03代码更容易地移植到C ++ 0x,而不是帮助人们编写严格符合C ++ 0x的代码。