Описание тега argument-dependent-lookup

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