[RFC] libstdc++/9404 or weird stringbuf internals
Benjamin Kosnik
bkoz@redhat.com
Thu Feb 13 01:57:00 GMT 2003
>Upon the first one, overflow is called since there isn't an
>allocated string. Therefore overflow allocates one, then calls
>sputc again, as prescribed by the standard (well, not really, in
>fact it does *this->_M_out_cur = traits_type::to_char_type(__c);
>which is not the same thing, but this is a minor nit which
>could be easily fixed with some performance implications...).
This should be fixed, and is an error in the current implementation.
You can test this with a derived streambuf with a sputc member. I didn't
do that, but it should probably be done.
As for the rest, it is an error with _M_out_end being set incorrectly.
Petur's right, if epptr() == pptr(), overflow, but that should not be
the case for the seconf sputc.
// there is no condition in the standard that requires this.
// in fact, this should not be true.
assert(dsbuf.pub_epptr() == dsbuf.pub_pptr());
// the standard says nothing about a mandated call to overflow here.
called = false;
dsbuf.sputc('a');
assert(called); // 20030212 fail
Don't know if this is that helpful.
-benjamin
More information about the Libstdc++
mailing list