Я смотрел запись в Википедии argument-dependent lookup, и (янв 04, 2014) следующий пример был дан:Почему «std :: endl» требует квалификацию пространства имен при использовании в выражении «std :: cout << std :: endl;», учитывая зависящий от аргумента поиск?
#include<iostream>
int main()
{
std::cout << "Hello World, where did operator<<() come from?" << std::endl;
}
... со следующим комментарием:
Обратите внимание, что станд :: епсИ является функцией, но она нуждается в полной квалификации, , поскольку он используется в качестве аргумента для оператора < < (std :: endl - забава ction указатель, а не вызов функции).
Мое мнение, что комментарий неверен (или просто неясен). Я рассматриваю изменение комментария сказать, вместо
Обратите внимание, что STD :: епсИ нуждается в полной квалификации, потому что ADL не относится к аргументам вызова функции; он относится только к имени функции.
Я исправлю, что комментарий к Википедии неверный? Является ли мое предложение правильным? (I.e., является ли мое понимание ADL правильным в этом примере?)
По той же причине, почему 'cout' нуждается в квалификации пространства имен. – Mehrdad
@Mehrdad Хотя, возможно, если ADL ** ** использовались для поиска имен, используемых как * другие аргументы * для функции, имя можно было бы найти с помощью ADL. –
ADL означает, что имя функции может быть выведено из аргументов, а не наоборот. –