Czytam The C ++ Programming Language, 4th Edition (by Bjarne Stroustrup ) owyszukiwanie zależne od argumentów. Oto cytat (26.3.6, Overaggressive ADL):
Wyszukiwanie zależne od argumentów (często nazywane ADL) jest bardzo przydatne w celu uniknięcia gadatliwości (14.2.4). Na przykład:
#include <iostream> int main() { std::cout << "Hello, world" << endl; // OK because of ADL }Bez wyszukiwania zależnego od argumentów
endlmanipulator nie zostałby znaleziony. W obecnej sytuacji kompilator zauważa, że pierwszy argument do<<jestostreamzdefiniowany wstd. Dlatego szukaendlwstdi znajduje to (w<iostream>).
A oto wynik wygenerowany przez kompilator (tryb 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;
^
Albo jest to błąd w kompilatorze, albo w książce. Co mówi norma?
Aktualizacja:
Muszę trochę wyjaśnić. Wiem, że właściwą odpowiedzią jest użycie std::endl. Pytanie dotyczyło tekstu w książce. Jak już powiedział Lachlan Easton , nie jest to zwykła literówka. Cały akapit jest (prawdopodobnie) błędny. Mogę zaakceptować tego rodzaju błąd, jeśli książka pochodzi od innego (mniej znanego) autora, ale miałem (i nadal mam) wątpliwości, ponieważ została napisana przez Bjarne'a.
std::endlbez błędu