Почему функции-члены класса имеют функции без тени с таким же именем?
Недавно это привлекло мое внимание этот член функции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 свободная функция внутри класса. То, что я хочу знать, является обоснованием этого дизайна.