¿Por qué el alcance del parámetro C ++ afecta la búsqueda de funciones dentro de un espacio de nombres?

Esto me parece un poco al revés, pero funciona:

#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, necesitaría nTest :: para acceder a fTest, pero su parámetro que pertenece a nTest parece agregar 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 se 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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta