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

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

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

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 иногда называют «Поиск Кенига» после Эндрю Кенига, который предложил эту функцию.