#include <iostream>
#include <sstream>
std::stringstream::pos_type size_of_stream(const std::stringstream& ss)
{
std::streambuf* buf = ss.rdbuf();
// Get the current position so we can restore it later
std::stringstream::pos_type original = buf->pubseekoff(0, ss.cur, ss.out);
// Seek to end and get the position
std::stringstream::pos_type end = buf->pubseekoff(0, ss.end, ss.out);
// Restore the position
buf->pubseekpos(original, ss.out);
return end;
}
int main()
{
std::stringstream ss;
ss << "Hello";
ss << ' ';
ss << "World";
ss << 42;
std::cout << size_of_stream(ss) << std::endl;
// Make sure the output string is still the same
ss << "\nnew line";
std::cout << ss.str() << std::endl;
std::string str;
ss >> str;
std::cout << str << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KCnN0ZDo6c3RyaW5nc3RyZWFtOjpwb3NfdHlwZSBzaXplX29mX3N0cmVhbShjb25zdCBzdGQ6OnN0cmluZ3N0cmVhbSYgc3MpCnsKICAgIHN0ZDo6c3RyZWFtYnVmKiBidWYgPSBzcy5yZGJ1ZigpOwoKICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbiBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlcgogICAgc3RkOjpzdHJpbmdzdHJlYW06OnBvc190eXBlIG9yaWdpbmFsID0gYnVmLT5wdWJzZWVrb2ZmKDAsIHNzLmN1ciwgc3Mub3V0KTsKCiAgICAvLyBTZWVrIHRvIGVuZCBhbmQgZ2V0IHRoZSBwb3NpdGlvbgogICAgc3RkOjpzdHJpbmdzdHJlYW06OnBvc190eXBlIGVuZCA9IGJ1Zi0+cHVic2Vla29mZigwLCBzcy5lbmQsIHNzLm91dCk7CgogICAgLy8gUmVzdG9yZSB0aGUgcG9zaXRpb24KICAgIGJ1Zi0+cHVic2Vla3BvcyhvcmlnaW5hbCwgc3Mub3V0KTsKCiAgICByZXR1cm4gZW5kOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOwoKICAgIHNzIDw8ICJIZWxsbyI7CiAgICBzcyA8PCAnICc7CiAgICBzcyA8PCAiV29ybGQiOwogICAgc3MgPDwgNDI7CgogICAgc3RkOjpjb3V0IDw8IHNpemVfb2Zfc3RyZWFtKHNzKSA8PCBzdGQ6OmVuZGw7CgogICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgc3RyaW5nIGlzIHN0aWxsIHRoZSBzYW1lCiAgICBzcyA8PCAiXG5uZXcgbGluZSI7CiAgICBzdGQ6OmNvdXQgPDwgc3Muc3RyKCkgPDwgc3RkOjplbmRsOwoKICAgIHN0ZDo6c3RyaW5nIHN0cjsKICAgIHNzID4+IHN0cjsKICAgIHN0ZDo6Y291dCA8PCBzdHIgPDwgc3RkOjplbmRsOwp9