#include <iostream>
#include <utility>
template<typename T, typename = decltype(std::declval<T>().print_to(std::declval<std::ostream&>()))>
std::ostream &operator<<(std::ostream &s, const T &t) {
t.print_to(s);
return s;
}
struct foo {
void print_to(std::ostream &s) const {
s << "foo";
}
};
int main() {
std::cout << foo() << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFQ+KCkucHJpbnRfdG8oc3RkOjpkZWNsdmFsPHN0ZDo6b3N0cmVhbSY+KCkpKT4Kc3RkOjpvc3RyZWFtICZvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmcywgY29uc3QgVCAmdCkgewogICAgdC5wcmludF90byhzKTsKICAgIHJldHVybiBzOwp9CgpzdHJ1Y3QgZm9vIHsKICAgIHZvaWQgcHJpbnRfdG8oc3RkOjpvc3RyZWFtICZzKSBjb25zdCB7CiAgICAgICAgcyA8PCAiZm9vIjsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgc3RkOjpjb3V0IDw8IGZvbygpIDw8ICJcbiI7Cn0=