Я читаю Язык программирования С++, 4-е издание (Bjarne Stroustrup) о argument-dependent-lookup, Вот цитата (26.3.6, Overaggressive ADL):
Аргумент-зависимый поиск (часто называемый ADL) очень полезен, чтобы избежать подробностей (14.2.4). Например:
#include <iostream> int main() { std::cout << "Hello, world" << endl; // OK because of ADL }
Без зависимого от аргументов поиска манипулятор
endl
не будет найден. Как бы то ни было, компилятор замечает, что первый аргумент<<
- этоostream
, определенный вstd
. Поэтому он ищетendl
вstd
и находит его (в<iostream>
).
И вот результат, созданный компилятором (режим С++ 11):
prog.cpp: In function ‘int main()’:
prog.cpp:4:36: error: ‘endl’ was not declared in this scope
std::cout << "Hello, world" << endl;
^
Либо это ошибка в компиляторе, либо в книге. Что говорит стандарт?
Update:
Мне нужно немного уточнить. Я знаю, что правильный ответ - использовать std::endl
. Вопрос касался текста в книге. Как сказал Lachlan Easton, это не просто опечатка. Весь абзац (вероятно) ошибочен. Я могу принять такую ошибку, если книга принадлежит другому (менее известному) автору, но я был (и до сих пор) сомневаюсь, потому что это было написано Бьярном.