如果我在某处定义一个命名空间log
并使其在全局范围内可访问,这将与double log(double)
标准cmath
标题冲突。实际上,大多数编译器似乎都支持它——SunCC、MSVC、GCC 的大多数版本——但 GCC 4.1.2 没有。
不幸的是,似乎没有办法解决歧义,因为using
命名空间标识符的声明是不合法的。log::Log
即使包含在内,您知道我可以在全局命名空间中写入的任何方式cmath
吗?
谢谢。
编辑:有人知道 C++03 标准对此有什么看法吗?我会认为范围运算符充分消除了log
在下面的代码示例中使用的歧义。
#include <cmath>
namespace foo
{
namespace log
{
struct Log { };
} // namespace log
} // namespace foo
using namespace foo;
int main()
{
log::Log x;
return 0;
}
// g++ (GCC) 4.1.2 20070115 (SUSE Linux)
// log.cpp: In function `int main()':
// log.cpp:20: error: reference to `log' is ambiguous
// /usr/include/bits/mathcalls.h:110: error: candidates are: double log(double)
// log.cpp:7: error: namespace foo::log { }
// log.cpp:20: error: expected `;' before `x'