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

Следующий код показывает вызов функции другой функции.
Оба имеют одинаковое имя, но разные подписи.
Это работает как ожидалось.

//declarations
void foo();
void foo(int);

int main(){
  foo();
}

//definitions
void foo(){
    foo(1);
}
void foo(int){}

Единственное отличие, которое я сейчас сделаю, - это обернуть одну из функций в структуру:

//declarations
struct Bar{
    void foo();
};
void foo(int);

int main(){
  Bar bar;
  bar.foo();
}

//definitions
void Bar::foo(){
    foo(1);
}
void foo(int){}

Это не в состоянии скомпилировать.

In member function ‘void Bar::foo()’:
error: no matching function for call to ‘Bar::foo(int)’
         foo(1);
              ^
note: candidate: void Bar::foo()
     void Bar::foo(){
          ^
note:   candidate expects 0 arguments, 1 provided

Я не понимаю, почему он хочет вызывать foo (int) как метод, когда существует глобальная функция.
Он не упоминает ничего о двусмысленности, он просто не может найти функцию.

Почему это происходит, и как я могу это исправить?

Примечание: Я упаковываю старый код C в оболочку C ++, и большинство методов C ++ являются вызовами глобальных функций C, которые неявно передают упакованную структуру. Это похоже на то, что происходит выше (с точки зрения ошибок компилятора).

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

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