C++ · Avançado · Inglês · Técnico
ADL
Argument-dependent lookup: regra que, na chamada de uma função sem qualificação, também procura o nome nos namespaces dos tipos dos argumentos. Por isso swap(a, b) acha a versão certa.
Onde usar
Explica por que o operator<< de um tipo seu, definido no mesmo namespace, é achado sem prefixo, e justifica o idioma using std::swap seguido de swap(a, b). Também causa ambiguidades surpreendentes.
Em código
namespace app {
struct T {};
void ver(T) { puts("app"); }
}
app::T t;
ver(t); // acha app::ver por ADLExemplos
ADL finds that operator in the namespace of the argument.
A ADL acha esse operador no namespace do argumento.
Call swap unqualified so ADL can pick the custom version.
Chame swap sem qualificar para a ADL escolher a versão do tipo.
Cuidado
ADL não considera o tipo de retorno; e chamadas qualificadas como std::swap(a, b) desligam a ADL.
Sinônimos
Koenig lookup
Origem
Sigla de Argument-Dependent Lookup, busca dependente de argumento.