У меня есть небольшой фрагмент кода для вашего рассмотрения, который меня очень озадачивает. Странно, что он компилируется как на 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::
.
Есть ли у кого-нибудь объяснения? Это, конечно, я, а не компилятор, здесь не так.