Czy wyszukiwanie zależne od argumentów dotyczy tylko przestrzeni nazw lub klas?

Czytałem książkę szablonową Josuttisa i próbowałem objąć głowę ADL. Mówi, że „ADL kontynuuje przeglądanie nazwy w przestrzeniach nazw i klasach” assocaited za pomocą „typów argumentów wywołania”. Próbuję tylko zobaczyć, jak to działa, szukając nazwy w klasie. Poniżej przedstawiam przykład mojego testu. Widzę, jak wyszukuje nazwę w przestrzeni nazw.

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)
}

Ale jeśli zmienię bryan_ns na przestrzeń nazw w ten sposób:

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)
}

questionAnswers(2)

yourAnswerToTheQuestion