Si consideri il seguente frammento di codice:Anonymous Namespace ambiguità
void Foo() // 1
{
}
namespace
{
void Foo() // 2
{
}
}
int main()
{
Foo(); // Ambiguous.
::Foo(); // Calls the Foo in the global namespace (Foo #1).
// I'm trying to call the `Foo` that's defined in the anonymous namespace (Foo #2).
}
Come posso fare riferimento a qualcosa all'interno di un namespace anonimo in questo caso?
Ok, quello che dice lo standard ha senso. Tuttavia, perché c'è un'ambiguità, allora? Se non riesco ad accedere a Foo nello spazio dei nomi anonimo, il compilatore dovrebbe essere in grado di dedurre che l'unico altro Foo è quello in ambito globale. Non avrei dovuto usare affatto l'operatore di risoluzione dell'oscilloscopio. Qualche idea su questo aspetto del problema? – sharp02
Ri: la tua modifica - Questo è più o meno quello che sto facendo ora, tranne che uso una funzione wrapper per arrivare alla funzione obiettivo effettiva. – sharp02
@sharp: ci sono due simboli 'Foo' in quell'ambito. Si consideri una situazione equivalente: 'namespace A {int i; } spazio dei nomi B {int i; } utilizzando il namespace A; usando il namespace B; '. –