【发布时间】:2011-04-01 07:58:03
【问题描述】:
我知道using std::swap 的技术可以通过ADL 启用用户定义的swap 函数,但我不知道这也应该应用于其他一些函数。例如,我在模板代码中滥用std::abs,而我应该使用类似的东西:
template <class Int> void f(Int i) {
using std::abs;
Int j = abs(i);
// ...
}
你能想到哪些标准函数应该这样使用?
附带说明:当包含cstdlib 时,g++ 将abs 放入全局命名空间中(实际上ctsdlib 包含stdlib.h(它定义了函数 abs)并且确实#undef abs...),标准是怎么说的?
【问题讨论】:
-
当前标准规定
<cstdlib>应该只在命名空间内提供函数。新的 C++11 标准将允许 g++(和大多数其他编译器)已经完成的工作。