¿La búsqueda dependiente del argumento solo busca espacios de nombres o clases también?

He estado leyendo el libro de plantillas de Josuttis, y he estado tratando de poner mi cabeza alrededor de ADL. Dice que "ADL procede buscando el nombre en los espacios de nombres y las clases" asociados con "los tipos de los argumentos de llamada". Solo intento ver cómo funciona buscando el nombre en una clase. Pongo un ejemplo de mi prueba a continuación. Veo cómo busca el nombre en un espacio de nombres.

class bryan_ns {
  public:
  class bryan {
    public:
      enum E { e1 };
      static void bryan_test() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
  };

  void f(bryan::E) { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};

void f(int)
{
  std::cout << "::f(int) called\n";
}


int main()
{
  f(bryan_ns::bryan::e1); // calls ::f(int)
}

Pero si cambio bryan_ns a un espacio de nombres así:

namespace bryan_ns {
  public:
  class bryan {
    public:
      enum E { e1 };
      static void bryan_test() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
  };

  void f(bryan::E) { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};

void f(int)
{
  std::cout << "::f(int) called\n";
}


int main()
{
  f(bryan_ns::bryan::e1); // calls bryan_ns::f(bryan::E)
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta