Differences between std::endl and '\n' for streambuffer implementations

Viewed 338

I'm currently trying to implement a subclass of stringbuf to allow the buffer to tokenize for specific chars ('\n' in my case) and undertake an action if this char occurs (dump the message to a logger and clear buffer afterwards in my case). To achieve this goal, I overrode sputc (to implement watching out for the '\n') and xsputn (to use sputc indeed, as the GCC implementation doesn't seem to do this by default). For debugging purposes, I let sputc write out each character that is passed to it to stdout.

Now this is my question: If I use something like

mystream << "Some text" << std::endl;

sputc receives each character except of the '\n' which should be inducted by std::endl, so the action that is expected is not done because the '\n' isn't passed on. If I use something like

mystream << "Some text" << '\n';

or even

mystream << "Some text" << "\n" << std::flush;

everything works as expected and my sputc implementation gets the '\n' char.

So my question is: Shouldn't both code lines do exactly the same concerning the stringbuf behind, and if not, which other methods do I have to override to get the '\n'?

1 Answers
Related