Sucht die argumentabhängige Suche auch nur nach Namespaces oder Klassen?

Ich habe das Josuttis-Schablonenbuch gelesen und versucht, meinen Kopf um ADL zu legen. Er sagt, dass "ADL fortfährt, indem der Name in Namespaces und Klassen nachgeschlagen wird", verbunden mit "den Typen der Aufrufargumente". Ich versuche nur zu sehen, wie es funktioniert, den Namen in einer Klasse nachzuschlagen. Ich habe unten ein Beispiel für meinen Test angegeben. Ich sehe, wie es den Namen in einem Namespace sucht.

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

Aber wenn ich bryan_ns in einen Namespace wie diesen ändere:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage