私はあなたの考慮のためにここに小さなコードを持っていますが、それは私をかなり困惑させます。奇妙なことに、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
}
同じ名前空間からのclass引数により、関数は名前空間f
から「リーク」し、。なしでアクセスできるようになりますname::
。
誰かがこれについての説明がありますか?確かに私であり、コンパイラがここで間違っているわけではありません。