【发布时间】:2012-01-30 15:41:08
【问题描述】:
当在 g++ 4.6.1 中使用 std::abs() 函数的 double 变体而没有 std 时,不会给出警告或错误。
#include <algorithm>
#include <cmath>
double foobar(double a)
{
return abs(a);
}
这个版本的 g++ 似乎通过来自algorithm 的包含之一将abs() 的double 变体拉入全局命名空间。这看起来现在是标准允许的(参见question),但不是必需的。
如果我使用编译器编译上面的代码,没有将abs()的double变体拉入全局命名空间(比如g++ 4.2),那么会报如下错误:
warning: passing 'double' for argument 1 to 'int abs(int)'
如何强制 g++ 4.6.1 和其他将函数拉入全局命名空间的编译器发出警告,以便在与其他编译器一起使用时防止错误?
【问题讨论】:
-
如果这是您需要的功能,使用
std::abs有什么问题? -
@JonathanLeffler 没什么,但很容易被错误地错过。我不希望该漏洞未被发现并导致其他编译器出现编译问题。
标签: c++