ADL Recherche dépendante des arguments
La règle du C++ selon laquelle, lors d'un appel de fonction non qualifié, le compilateur cherche aussi dans les espaces de noms des types des arguments. Aussi appelée « recherche de Koenig ».
C'est ce qui permet à std::cout << x de fonctionner sans qu'on précise de quel operator<< il s'agit ; loin d'être une curiosité, elle porte une partie de l'édifice. Sans elle, la surcharge d'opérateurs par-delà les frontières d'espaces de noms serait inutilisable. Elle sous-tend aussi l'idiome using std::swap; swap(a, b);, qui préfère la version propre au type et se rabat sur celle de la bibliothèque standard — la méthode établie pour les points de personnalisation dans le code générique. Revers de la médaille : elle peut faire entrer en jeu des surcharges issues d'espaces de noms auxquels on n'avait jamais pensé, et créer des ambiguïtés qui n'apparaissent que lorsque quelqu'un inclut un en-tête sans rapport apparent. C'est pourquoi les ranges de C++20 recourent à des objets de point de personnalisation qui la bloquent délibérément.