Почему функции-члены класса имеют функции без тени с таким же именем?

Недавно это привлекло мое внимание этот член функцииcompletely shadow свободные функции с тем же именем, когда внутри класса. И полностью я имею в виду, что каждая свободная функция с тем же именем вообще не рассматривается для разрешения перегрузки. Я могу понять, почему это сделано с чем-то вроде этого:

void f();

struct S
{
    void f();

    void g()
    {
        f(); // calls S::f instead of ::f
    }
};

где функции имеют идентичные подписи, это естественно, так как переменная область видимости работает одинаково. Но зачем запрещать однозначные вызовы, когда свободная функция имеет другую подпись, например:

void f();

struct S
{
    void f(int x);

    void g()
    {
        f(); // fails to compile attempting to call S::f, which has wrong signature
    }
};

Я не спрашиваю, как позвонитьshadowed свободная функция внутри класса. То, что я хочу знать, является обоснованием этого дизайна.

Ответы на вопрос(3)

Ваш ответ на вопрос