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