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.

questionAnswers(3)

yourAnswerToTheQuestion