¿Por qué debo usar la dirección del operador para obtener un puntero a una función miembro?

struct A
{
    void f() {}
};

void f() {}

int main()
{
    auto p1 = &f;     // ok
    auto p2 = f;        // ok
    auto p3 = &A::f; // ok

    //
    // error : call to non-static member function
    // without an object argument
    //
    auto p4 = A::f; // Why not ok?
}

¿Por qué debo usar la dirección del operador para obtener un puntero a una función miembro?

Respuestas a la pregunta(1)

Su respuesta a la pregunta