Considere el siguiente fragmento:Anónimo Espacio de nombres ambigüedad
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).
}
¿Cómo puedo referir a algo dentro de un espacio de nombres en el anonimato en este caso?
De acuerdo, lo que dice la norma tiene sentido. Sin embargo, ¿por qué hay una ambigüedad, entonces? Si no puedo acceder al Foo en el espacio de nombres anónimo, el compilador debería poder deducir que el único otro Foo es el del alcance global. No debería tener que usar el operador de resolución de alcance en absoluto. ¿Alguna idea sobre ese aspecto del problema? – sharp02
Re: su edición - Eso es más o menos lo que estoy haciendo ahora, excepto que utilizo una función de envoltura para llegar a la función objetivo real. – sharp02
@sharp: hay dos símbolos 'Foo' en ese ámbito. Considere una situación equivalente: 'namespace A {int i; } espacio de nombres B {int i; } usando el espacio de nombres A; usando el espacio de nombres B; '. –