Предположим, у вас есть следующий код
namespace a{
struct S{};
//void f(int){}
}
namespace b{
struct T{};
}
struct X{};
void f(X){}
void f(b::T){}
void f(a::S){}
namespace a{
void g(){
S s;b::T t;
X x;
f(x);
f(s);
f(t);
}
}
int main(){
a::g();
}
если void f(int){}
определено в пространстве имен (строка 3 раскомментирована ), она затеняет более поздние определения void f(b::T){}
и void f(a::S){}
, но не void f(X){}
. Почему?