Por que o membro da classe funciona com funções livres de sombra com o mesmo nome?
Recentemente, veio ao meu conhecimento que as funções de membrocompletamentesombra funções livres com o mesmo nome quando dentro da classe. E por completamente quero dizer que cada função livre com o mesmo nome não é considerada para resolução de sobrecarga em tudo. Eu posso entender porque é feito com algo assim:
void f();
struct S
{
void f();
void g()
{
f(); // calls S::f instead of ::f
}
};
onde as funções têm assinaturas idênticas, seu único escopo natural como variável funciona da mesma maneira. Mas por que proibir chamadas não ambíguas onde a função livre tem assinatura diferente como esta:
void f();
struct S
{
void f(int x);
void g()
{
f(); // fails to compile attempting to call S::f, which has wrong signature
}
};
Eu não estou perguntando como chamar umsombreado função livre de dentro da classe. O que eu quero saber é a lógica por trás desse design.