#include <iostream>
#include <string>
template <typename T, typename... Args>
struct Printer {
std::ostream& print(std::ostream& os, const T& t, const Args&... rest) const {
os << t << " ";
return Printer<Args...>().print(os, rest...);
}
};
template <typename T>
struct Printer<T> {
std::ostream& print(std::ostream& os, const T& t) const {
os << t << std::endl;
return os;
}
};
template <typename T, typename... Args>
std::ostream& print(std::ostream& os, const T& t, const Args&... rest) {
return Printer<T, Args...>().print(os, t, rest...);
}
int main()
{
print(std::cout, std::string("hepup"));
print(std::cout, 1, 2.23434);
print(std::cout, "hello", '\n', 3.134, true, 1e8);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgpzdHJ1Y3QgUHJpbnRlciB7CiAgICBzdGQ6Om9zdHJlYW0mIHByaW50KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IFQmIHQsIGNvbnN0IEFyZ3MmLi4uIHJlc3QpIGNvbnN0IHsKICAgICAgICBvcyA8PCB0IDw8ICIgIjsKICAgICAgICByZXR1cm4gUHJpbnRlcjxBcmdzLi4uPigpLnByaW50KG9zLCByZXN0Li4uKTsKICAgIH0KfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgUHJpbnRlcjxUPiB7CiAgICBzdGQ6Om9zdHJlYW0mIHByaW50KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IFQmIHQpIGNvbnN0IHsKICAgICAgICBvcyA8PCB0IDw8IHN0ZDo6ZW5kbDsKICAgICAgICByZXR1cm4gb3M7CiAgICB9Cn07CgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CnN0ZDo6b3N0cmVhbSYgcHJpbnQoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgVCYgdCwgY29uc3QgQXJncyYuLi4gcmVzdCkgewogICAgcmV0dXJuIFByaW50ZXI8VCwgQXJncy4uLj4oKS5wcmludChvcywgdCwgcmVzdC4uLik7Cn0KCmludCBtYWluKCkKewogICAgcHJpbnQoc3RkOjpjb3V0LCBzdGQ6OnN0cmluZygiaGVwdXAiKSk7CiAgICBwcmludChzdGQ6OmNvdXQsIDEsIDIuMjM0MzQpOwogICAgcHJpbnQoc3RkOjpjb3V0LCAiaGVsbG8iLCAnXG4nLCAzLjEzNCwgdHJ1ZSwgMWU4KTsKICAgIHJldHVybiAwOwp9Cg==