#include <iostream>
using namespace std;
template<typename T>
class auto_delim_manip
{
public:
auto_delim_manip(T value_, char delim_)
: value(value_)
, delim(delim_) {}
void put(std::ostream& os) const {
os << value << delim;
os.flush();
}
private:
T value;
char delim;
};
template<typename T>
auto_delim_manip<T> auto_delim(T value, char delim = '\n') {
return auto_delim_manip<T>(value,delim);
}
template<typename T>
std::ostream& operator<<(std::ostream& os, const auto_delim_manip<T>& autoDelim) {
autoDelim.put(os);
return os;
}
int main() {
cout << auto_delim(5.2) << auto_delim(3) << auto_delim("Hello!");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBjbGFzcyBhdXRvX2RlbGltX21hbmlwCiAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgYXV0b19kZWxpbV9tYW5pcChUIHZhbHVlXywgY2hhciBkZWxpbV8pIAogICAgICAgIDogdmFsdWUodmFsdWVfKSAKICAgICAgICAsIGRlbGltKGRlbGltXykge30KICAgICAgICB2b2lkIHB1dChzdGQ6Om9zdHJlYW0mIG9zKSBjb25zdCB7CiAgICAgICAgICAgIG9zIDw8IHZhbHVlIDw8IGRlbGltOwogICAgICAgICAgICBvcy5mbHVzaCgpOwogICAgICAgIH0KICAgIHByaXZhdGU6CiAgICAgICAgVCB2YWx1ZTsKICAgICAgICBjaGFyIGRlbGltOwogICAgfTsKICAgIAogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgIGF1dG9fZGVsaW1fbWFuaXA8VD4gYXV0b19kZWxpbShUIHZhbHVlLCBjaGFyIGRlbGltID0gJ1xuJykgewogICAgICAgIHJldHVybiBhdXRvX2RlbGltX21hbmlwPFQ+KHZhbHVlLGRlbGltKTsKICAgIH0KIAogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBhdXRvX2RlbGltX21hbmlwPFQ+JiBhdXRvRGVsaW0pIHsKICAgICAgICBhdXRvRGVsaW0ucHV0KG9zKTsKICAgICAgICByZXR1cm4gb3M7CiAgICB9CiAgICAKICAgIGludCBtYWluKCkgewoJCiAgICAgICAgY291dCA8PCBhdXRvX2RlbGltKDUuMikgPDwgYXV0b19kZWxpbSgzKSA8PCBhdXRvX2RlbGltKCJIZWxsbyEiKTsKCQogICAgICAgIHJldHVybiAwOwogICAgfQ==