Asumo que estás preguntando por qué usar una directiva #include en un código fuente de C++ que está siendo compilado con un compilador moderno y compatible con los estándares da como resultado un error.
This happens because, since C++ was first standardized in 1998, the correct directive is
- #include
Now, keep in mind that the first C++ compilers (the venerable cfront) were actually programs that parsed the C++ source code after passing it through the C preprocessor, and then transformed it into C code which was then compiled as a regular C program.
Los archivos de cabecera en C (y eso incluye también las cabeceras del sistema) solían nombrarse con un .h (por ejemplo: stdio.h), por lo que era bastante obvio utilizarlo también para las cabeceras de C++. Así que los primeros compiladores de C++ realmente tenían un archivo de cabecera iostream.h y simplemente se incluía usando su nombre.
Después, si no recuerdo mal, la primera estandarización de C++ en 1998 dijo que las cabeceras estándar de C++ no tenían .h en su nombre. Ese fue un pequeño cambio que, sin embargo, rompió la compatibilidad hacia atrás a nivel de código fuente: para facilitar la transición, los compiladores y preprocesadores de C++ aceptaban ambos nombres (es decir, tanto iostream.h como iostream), aunque el nombre que cumplía con el estándar fuera iostream. Aproximadamente en esa época (posiblemente antes), también tuvimos los primeros compiladores de C++ que no utilizaban C como paso intermedio, por lo que nombrar las cabeceras del sistema con un sufijo .h era cada vez más inútil y confuso.
Entonces, algunos años más tarde, los compiladores de C++ empezaron a aceptar sólo los nombres que cumplían con el estándar, porque la gente tenía mucho tiempo para arreglar su código C++ para entonces. Por desgracia, todavía hay algunos libros de programación y ejemplos de código anticuados que utilizan la sintaxis no estándar (o simplemente algunos libros y ejemplos sencillamente malos).