Ho codice seguente:Perché chiamare una funzione non membro con lo stesso nome di una funzione membro genera un errore
void f(int){}
struct A
{
void f()
{
f(1);
}
};
Questo codice non è ben-formato con il messaggio di errore (GCC): error: no matching function for call to ‘A::f(int)’
o (clang) Too many arguments to function call, expected 0, have 1; did you mean '::f'?
Perché ho bisogno di usare ::
per chiamare la funzione non-membro con lo stesso nome della funzione di membro, ma con la firma di diverso? Qual è la motivazione per questo requisito?
Penso che il compilatore dovrebbe essere in grado di capirlo Voglio chiamare la funzione non membro in quanto la firma è diversa (clang mette anche quello nel messaggio di errore!).
Si prega di non segnare questa come duplicato - si tratta di una questione diversa da questo Calling in C++ a non member function inside a class with a method with the same
Poiché risoluzione di ambito è separato dal, e eseguita prima, la risoluzione di sovraccarico. – Sneftel
Dai uno sguardo allo standard, in particolare §3.4.1 [basic.lookup.unqual] – WhozCraig