#include <string>
#include <sstream>
#include <iostream>
class Util
{
public:
std::ostringstream m_os;
Util() {}
~Util() { std::cout << m_os.str() << std::endl;}
};
int main (void)
{
// ----------- Using temporary anonymous instance -
// Output does not match expected, and the first insertion seems to
// only be able to handle instances that can be converted to int.
// Following prints "97key=val", but expect "akey=val"
(Util()).m_os << char('a') << std::string("key") << "=" << std::string("val");
// Following prints "0x80491eakey=val", but expect "Plain old C string key=val"
(Util()).m_os << "Plain old C string " << std::string("key") << "=" << std::string("val");
// Following results in syntax error
// error: no match for ‘operator<<’ in ‘Util().Util::m_os <<
(Util()).m_os << std::string("key") << "=" << std::string("val");
// ----------- Using named instance - output matches expected
// Block results in print "akey=val"
{
Util inst;
inst.m_os << char('a') << std::string("key") << "=" << std::string("val");
}
// Block results in print "Plain old C string key=val"
{
Util inst;
inst.m_os << "Plain old C string " << std::string("key") << "=" << std::string("val");
}
// Block results in print "key=val"
{
Util inst;
inst.m_os << std::string("key") << "=" << std::string("val");
}
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCmNsYXNzIFV0aWwKewpwdWJsaWM6CiAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbV9vczsKCiAgICBVdGlsKCkge30KICAgIH5VdGlsKCkgeyBzdGQ6OmNvdXQgPDwgbV9vcy5zdHIoKSA8PCBzdGQ6OmVuZGw7fQp9OwoKCgppbnQgbWFpbiAodm9pZCkKewovLyAtLS0tLS0tLS0tLSBVc2luZyB0ZW1wb3JhcnkgYW5vbnltb3VzIGluc3RhbmNlIC0gCiAgICAvLyAgT3V0cHV0IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkLCBhbmQgdGhlIGZpcnN0IGluc2VydGlvbiBzZWVtcyB0bwogICAgLy8gIG9ubHkgYmUgYWJsZSB0byBoYW5kbGUgaW5zdGFuY2VzIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBpbnQuCgogICAgLy8gRm9sbG93aW5nIHByaW50cyAiOTdrZXk9dmFsIiwgYnV0IGV4cGVjdCAiYWtleT12YWwiCiAgICAoVXRpbCgpKS5tX29zIDw8IGNoYXIoJ2EnKSA8PCBzdGQ6OnN0cmluZygia2V5IikgPDwgIj0iIDw8IHN0ZDo6c3RyaW5nKCJ2YWwiKTsKCiAgICAvLyBGb2xsb3dpbmcgcHJpbnRzICIweDgwNDkxZWFrZXk9dmFsIiwgYnV0IGV4cGVjdCAiUGxhaW4gb2xkIEMgc3RyaW5nIGtleT12YWwiCiAgICAoVXRpbCgpKS5tX29zIDw8ICJQbGFpbiBvbGQgQyBzdHJpbmcgIiA8PCBzdGQ6OnN0cmluZygia2V5IikgPDwgIj0iIDw8IHN0ZDo6c3RyaW5nKCJ2YWwiKTsKCiAgICAvLyBGb2xsb3dpbmcgcmVzdWx0cyBpbiBzeW50YXggZXJyb3IKICAgIC8vIGVycm9yOiBubyBtYXRjaCBmb3Ig4oCYb3BlcmF0b3I8POKAmSBpbiDigJhVdGlsKCkuVXRpbDo6bV9vcyA8PAogICAgKFV0aWwoKSkubV9vcyA8PCBzdGQ6OnN0cmluZygia2V5IikgPDwgIj0iIDw8IHN0ZDo6c3RyaW5nKCJ2YWwiKTsKCgovLyAtLS0tLS0tLS0tLSBVc2luZyBuYW1lZCBpbnN0YW5jZSAtIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkCgogICAgLy8gQmxvY2sgcmVzdWx0cyBpbiBwcmludCAiYWtleT12YWwiCiAgICB7CiAgICAgICAgVXRpbCBpbnN0OwogICAgICAgIGluc3QubV9vcyAgPDwgY2hhcignYScpIDw8IHN0ZDo6c3RyaW5nKCJrZXkiKSA8PCAiPSIgPDwgc3RkOjpzdHJpbmcoInZhbCIpOwogICAgfQoKICAgIC8vIEJsb2NrIHJlc3VsdHMgaW4gcHJpbnQgIlBsYWluIG9sZCBDIHN0cmluZyBrZXk9dmFsIgogICAgewogICAgICAgIFV0aWwgaW5zdDsKICAgICAgICBpbnN0Lm1fb3MgIDw8ICJQbGFpbiBvbGQgQyBzdHJpbmcgIiA8PCBzdGQ6OnN0cmluZygia2V5IikgPDwgIj0iIDw8IHN0ZDo6c3RyaW5nKCJ2YWwiKTsKICAgIH0KCiAgICAvLyBCbG9jayByZXN1bHRzIGluIHByaW50ICJrZXk9dmFsIgogICAgewogICAgICAgIFV0aWwgaW5zdDsKICAgICAgICBpbnN0Lm1fb3MgIDw8IHN0ZDo6c3RyaW5nKCJrZXkiKSA8PCAiPSIgPDwgc3RkOjpzdHJpbmcoInZhbCIpOwogICAgfQoKICAgIHJldHVybiAwOwp9