Я читаю язык программирования 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нет ошибки