Brunni (./285) :
Oué et c'est tout à fait naturel si tu suis la logique du C++. S'ils ont choisi de faire un namespace pour la librairie standard, c'est peut être discutable (ça a des avantages) mais c'est normal que ça ne compile pas si tu l'omets.Ensuite le .h n'a rien à faire là, si tu lui files un nom de fichier qui n'existe pas, c'est normal qu'il ne le trouve pas.
Voilà, bravo, tu as trouvé les 2 problèmes.

Bref je vois pas où tu veux en venir.
Je veux en venir au fait qu'avant la standardisation du C++98, le header était appelé
iostream.h et que ce nom se retrouve dans des centaines de tutoriaux, de plus le C++ pré-standard ne proposait pas non plus les namespaces, donc on trouve aussi plein de code exemple qui les oublie.
Un autre problème est que
g++ acceptait ce code non-standard pendant longtemps, mais ne l'accepte plus maintenant.
Pour les namespaces, le problème était que la
libstdc++ ne gérait pas les namespaces et que donc
g++ les ignorait pour faire tourner le code standard. Quand la
libstdc++ a été corrigée et ce hack supprimé de
g++, ça a fait mal. Mais il y avait toujours un
iostream.h de compatibilité qui faisait en gros l'équivalent de
#include <iostream> et
using namespace std; (mais seulement pour les symboles définies dans
iostream), header de compatibilité qui a aussi été supprimé plus récemment.
Sasume (./286) :
Il faut préciser « main(void) » ?
Non. En C++, et contrairement au C, (void) et () sont strictement équivalents. Le C++ ne permet pas les déclarations K&R (où () veut dire "accepte n'importe quoi").