esto parece un poco hacia atrás para mí, pero funciona:¿Por qué el alcance del parámetro C++ afecta la búsqueda de funciones dentro de un espacio de nombres?
#include <iostream>
namespace nTest
{
struct cTest {};
void fTest(cTest& x)
{
std::cout << "nTest::fTest(cTest&) called" << std::endl;
}
}
int main(void)
{
nTest::cTest x;
fTest(x); //Weird! fTest is resolved since its parameter belongs to nTest.
return 0;
}
Normalmente, se necesitaría NTest :: con el fin de acceder PRUEBA.F, pero su parámetro que pertenece a NTest parece añadir NTest a la lista de posibles ámbitos en los que buscar fTest. Me parece extraño que el alcance del parámetro influya en la búsqueda de funciones.
Esto compila bien en GCC, pero me pregunto si este uso es portátil. ¿Cuál es la definición oficial de este mecanismo de alcance?
ADL - Argument Dependent Lookup (http://en.wikipedia.org/wiki/Argument-dependent_name_lookup) – Nim
Lea también la respuesta aceptada [aquí] (http://stackoverflow.com/questions/2958648/what-are -the-pitfalls-of-adl) –