std::cout << os.str().end() - os.str().begin() << std::endl;
}
It looks like os.str().end() and os.str().begin() are iterators over
different sequences, so you get some strange results. It's easy to fix
by using a temporary
string temp = os.str();
but I was wondering if it exhibits the correct behaviour without the
temporary?
The behaviour is undefined without the temporary: the str() function returns
a string 'object' (not a reference to a string). Therefore, the two calls to
str() produce different objects, the two iterators refer to different
sequences, and the subtraction yields an undefined result.