次のコードがあるとします
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){}
名前空間aで定義されている場合(3行目はコメントされていません)、以降のvoid f(b::T){}
andの定義をシャドウしますが、。はシャドウしvoid f(a::S){}
ませんvoid f(X){}
。なんで?