Probably, g++ simply lets you compile programs (with warnings, though) that use old code, to facilitate compiling older programs that aren't maintained anymore.
About gcc 2.95, isn't that old enough to not have incorporated the new standards completely?
I remember a couple times when I used gcc 2.9x that I forgot a couple (or all) of headers and it compiled anyways. I don't know why this happens. I'm not sure about this with namespaces, I haven't tried yet.
I do know that without 'using namespace std;' that code will not compile under visual studio. I know this has little relevance in a linux forum, but I'm sure all of us have dont at least some work with products of the empire.
The namespace things are part of the C++99 standard, so that's why both MSVC and GCC implement it.
Just to let everyone know, I'm using 'g++ -Wall file.cpp' to compile these. No errors are generated when I use the new header files(without the .h).