Форма поиска имени в C++, который позволяет именам функций быть найденными в пространствах имен, связанных с аргументами, используемыми в вызове функции.

Неполный вызов функции такой как func(a, b, c) будет поиск имя func в пространствах имен, которые связаны с типами аргументов a, b и c. Например, если a имеет тип ns::A и функция ns::func существует затем, это может быть найдено зависимым поиском аргумента и будет добавлено к набору перегрузки, используемому для разрешения вызова.

Причина этой функции состоит в том, чтобы позволить перегруженные операторы, которые, как объявляют в пространствах имен, были найдены, потому что операторы не могут быть квалифицированы пространством имен, например.

namespace ns { struct A { }; A operator+(const A&, const A&); } void f(ns::A a1, ns::A a2) { ns::A sum = a1 + a2; // must find ns::operator+ } 

В примере выше + оператор должен найти ns::operator+, но без ADL это не было бы.
ADL позволяет естественное a1 + a2 синтаксис для работы как ожидалось, вместо того, чтобы иметь необходимость записать что-то как a2 ns::+ a2, который не является допустимым синтаксисом, или ns::operator+(a1, a2).

ADL иногда известен как "Поиск Koenig" после Andrew Koenig, который предложил функцию.