【发布时间】:2011-02-03 13:03:26
【问题描述】:
我在这里有一小段代码供您考虑,这让我很困惑。奇怪的是它可以在 Sun Studio 和 GCC 上编译,尽管我认为它不应该。
考虑一下:
namespace name
{
class C
{
int a;
};
void f(C c);
void g(int a);
}
int main(int argc, char** argv)
{
name::C c;
name::f(c);
f(c); // <--- this compiles, strangely enough
name::g(42);
// g(42); <--- this does not, as I expected
}
来自同一命名空间的类参数导致函数f“泄漏”出命名空间,并且可以在没有name:: 的情况下访问。
有人对此有解释吗?肯定是我错了,而不是编译器错了。
【问题讨论】:
-
有趣,BTW intel 编译器 (icpc) 也可以编译这个...
-
编辑了我自己的问题,以删除不相关的部分,让有相同问题的其他人更容易找到。
标签: c++ namespaces argument-dependent-lookup