#include <ctime>
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
#include <utility>
struct make_string
{
make_string & operator<<(std::ostream& (*manip)(std::ostream&))
{
manip(ostr);
return *this;
}
template <typename T> make_string & operator<<(const T & t)
{
ostr << t;
return *this;
}
operator std::string() const { return ostr.str(); }
std::string str() const { return ostr.str(); }
std::ostringstream ostr;
};
void message(const std::string&) {}
int main()
{
message(make_string() << "1 + 1 = " << 2 << "\n"); // OK
message(make_string() << "1 + 1 = " << 2 << std::endl); // Not OK
// OK
std::ostringstream os;
os << std::endl;
// Not ok.
make_string mk;
mk << std::endl;
}
I2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHV0aWxpdHk+CgpzdHJ1Y3QgbWFrZV9zdHJpbmcKewogICAgbWFrZV9zdHJpbmcgJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgKCptYW5pcCkoc3RkOjpvc3RyZWFtJikpCiAgICB7CiAgICAgICAgbWFuaXAob3N0cik7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gbWFrZV9zdHJpbmcgJiBvcGVyYXRvcjw8KGNvbnN0IFQgJiB0KQogICAgewogICAgICAgIG9zdHIgPDwgdDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdCB7IHJldHVybiBvc3RyLnN0cigpOyB9CgogICAgc3RkOjpzdHJpbmcgc3RyKCkgY29uc3QgeyByZXR1cm4gb3N0ci5zdHIoKTsgfQogICAgCiAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3N0cjsKfTsKCgp2b2lkIG1lc3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmKSB7fQoKaW50IG1haW4oKQp7CiAgICBtZXNzYWdlKG1ha2Vfc3RyaW5nKCkgPDwgIjEgKyAxID0gIiA8PCAyIDw8ICJcbiIpOyAvLyBPSwogICAgbWVzc2FnZShtYWtlX3N0cmluZygpIDw8ICIxICsgMSA9ICIgPDwgMiA8PCBzdGQ6OmVuZGwpOyAvLyBOb3QgT0sKICAgIAogICAgCiAgICAvLyBPSwogICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zOwogICAgb3MgPDwgc3RkOjplbmRsOwogICAgCiAgICAvLyBOb3Qgb2suCiAgICBtYWtlX3N0cmluZyBtazsKICAgIG1rIDw8IHN0ZDo6ZW5kbDsKfQ==