Headings can - and often - include other headings. Standard library headers are no exception.
Even if you decide not to include the heading (let him call it a ) that you depended on, it is possible that the heading turned out to be included by another heading (let it be called b ) that you included. In this case, your program does not guarantee continuation of work if the header b ever changed so as not to include a . This is why you should always include all the headers you depend on, even if your program works without including some of them.
All different versions of different implementations of the standard library are different, and therefore a in one version may include b , and a in another version may also not include b . The same applies to all APIs that have multiple versions of implementations.
source share