Dlaczego funkcje członków klasy cieniują funkcje o tej samej nazwie?
Ostatnio zwróciłem na mnie uwagę ten członek działacałkowiciecień darmowe funkcje o tej samej nazwie w klasie. I całkowicie rozumiem, że każda wolna funkcja o tej samej nazwie w ogóle nie jest brana pod uwagę przy rozdzielczości przeciążenia. Mogę zrozumieć, dlaczego tak się stało:
void f();
struct S
{
void f();
void g()
{
f(); // calls S::f instead of ::f
}
};
gdzie funkcje mają identyczne sygnatury, to naturalne, że zmienne zakresowanie działa w ten sam sposób. Ale po co zabraniać mało ambitnych połączeń, w których funkcja bezpłatna ma inny podpis:
void f();
struct S
{
void f(int x);
void g()
{
f(); // fails to compile attempting to call S::f, which has wrong signature
}
};
Nie pytam, jak zadzwonićcień darmowa funkcja od wewnątrz klasy. To, co chcę wiedzieć, jest uzasadnieniem tego projektu.