Por qué llamar a una función no miembro con el mismo nombre que una función miembro genera un error

Tengo el siguiente código:

void f(int){}

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

Este código no está bien formado con el mensaje de error (GCC):error: no matching function for call to ‘A::f(int)’ o (sonido metálico)Too many arguments to function call, expected 0, have 1; did you mean '::f'?

¿Por qué necesito usar:: llamar a la función no miembro con el mismo nombre que la función miembro, pero con una firma diferente? ¿Cuál es la motivación para este requisito?

Creo que el compilador debería poder resolverlo. Quiero llamar a la función de no miembro ya que la firma es diferente (¡clang incluso lo pone en el mensaje de error!).

No marque esto como duplicado; es una pregunta diferente a estaLlamar en C ++ una función no miembro dentro de una clase con un método con el mismo

Respuestas a la pregunta(4)

Su respuesta a la pregunta