Comportamento interessante do compilador com espaços para nome
Suponha o seguinte código:
#include <iostream>
using namespace std;
namespace X
{
class A{};
void f(A a){}
void g(int a){}
}
int main()
{
X::A a;
f(a);
g(5);
}
Ao compilar o código, ocorre o seguinte erro de compilação:
main.cpp: Na função 'int main ()':
main.cpp: erro: 'g' não foi declarado neste escopo
Então a funçãof
é compilado perfeitamente, masg
não é. Quão? Ambos pertencem ao mesmo espaço para nome. O compilador deduz essa funçãof
pertence aosX
espaço para nome do argumento do tipoX::A
? Como o compilador se comporta nesses casos?