The em(protected) members of the class tt(streambuf) are important for
understanding and using tt(streambuf) objects. Although there are both
protected hi(data member)data members and protected member functions
    hi(member function) defined in the tt(class streambuf) using the protected
em(data) members is strongly discouraged as using them violates the principle
of emi(data hiding). As tt(streambuf)'s set of member functions is quite
extensive, it is hardly ever necessary to use its data members directly. The
following subsections do not even list all protected member functions but only
those are covered that are useful for constructing specializations.

tt(Streambuf) objects control a buffer, used for input and/or output, for
which begin-, actual- and end-pointers have been defined, as depicted in
figure ref(SBBUFFERS).
    figure(iostreams/sbbuffers)
    (Input- and output buffer pointers of the class `streambuf')
    (SBBUFFERS)

tt(Streambuf) offers two protected constructors:
    itemization(
    ittq(streambuf::streambuf())
        (Default (protected) constructor of the tt(class streambuf).)
    ittq(streambuf::streambuf(streambuf const &rhs))
        ((Protected) copy constructor of the tt(class streambuf). Note that
this copy constructor merely copies the values of the data members of tt(rhs):
after using the copy constructor both tt(streambuf) objects refer to the same
data buffer and initially their pointers point at identical positions. Also
note that these are em(not) shared pointers, but only `raw copies'.)
    )
