Estoy leyendo The C ++ Programming Language, 4th Edition (por Bjarne Stroustrup ) sobrebúsqueda-dependiente de argumento. Aquí está la cita (26.3.6, ADL demasiado agresivo):
La búsqueda dependiente de argumentos (a menudo denominada ADL) es muy útil para evitar la verbosidad (14.2.4). Por ejemplo:
#include <iostream> int main() { std::cout << "Hello, world" << endl; // OK because of ADL }
Sin la búsqueda dependiente de argumentos,
endl
no se encontraría el manipulador. Tal como está, el compilador se da cuenta de que el primer argumento de<<
estáostream
definido enstd
. Por tanto, buscaendl
enstd
y lo encuentra (en<iostream>
).
Y aquí está el resultado producido por el compilador (modo 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;
^
O esto es un error en el compilador o en el libro. ¿Qué dice la norma?
Actualizar:
Necesito aclarar un poco. Sé que la respuesta correcta es usar std::endl
. La pregunta era sobre el texto del libro. Como ya dijo Lachlan Easton , no es solo un error tipográfico. Todo el párrafo está (probablemente) mal. Puedo aceptar este tipo de error si el libro es de otro autor (menos conocido), pero tenía (y todavía tengo) dudas porque fue escrito por Bjarne.
std::endl
no bug