Although stringstream
inherits from iostream
, it is not declared in the
header. The
header contains the definition of the iostream
type along with the famous cout
, cerr
, cin
, and clog
types, but not other types that are iostreams
(for example, file streams). For these, you do need to explicitly #include
the requisite header files.
EDIT: In response to your revised question, I pulled up the C++ spec and interestingly it does not say that
has to include either
or
. In fact, it could get away with just including
. Consequently, it's possible to #include
without actually getting a full class definition for either istream
or ostream
. Only explicitly including those headers can guarantee that the definitions of those classes, not just the forward-declarations, are visible.