It's not. The standard guarantees that the things that are listed for that header appear. Nothing else.
As long as the standard headers are real files, there is no way around it. (I think. It might be that std:air only appears in references, which would mean a forward declaration would suffice on a compiler that supports extern templates.) But the standard doesn't even guarantee that: the compiler could just as well use those names as triggers to make the symbols available and not include the file.
However, what I said above is subject to some dispute. For example, by my philosophy, this program is not standards-conformant:
Code:
#include <iostream>
int main()
{
std::cout << "Hello, World!" << std::endl;
}
The reason is that std::endl is part of <ostream>, not <iostream>. It's not available.
Some people on c.l.c++.m and c.s.c++ argue that the above program should be compliant. Some disagree. In the end, all current compilers accept it.