Por que chamar uma função não membro com o mesmo nome de uma função membro gera um erro

Eu tenho o próximo código:

void f(int){}

struct A
{
    void f()
    {
        f(1);
    }
};

Este código não está bem formado com a mensagem de erro (GCC):error: no matching function for call to ‘A::f(int)’ ou (clang)Too many arguments to function call, expected 0, have 1; did you mean '::f'?

Por que preciso usar:: chamar a função de não membro com o mesmo nome da função de membro, mas com assinatura diferente? Qual é a motivação para esse requisito?

Eu acho que o compilador deve ser capaz de descobrir isso. Eu quero chamar a função de não-membro, pois a assinatura é diferente (o clang até coloca isso na mensagem de erro!).

Não marque isso como duplicado - é uma pergunta diferente destaChamar em C ++ uma função não membro dentro de uma classe com um método com o mesmo

questionAnswers(4)

yourAnswerToTheQuestion