#include <iostream>
using namespace std;
struct clear_line { } cls;
class out {
private:
std::ostream &strm = std::cout;
bool is_next_clear = false;
public:
template <typename T>
out& operator<<(const T& obj) {
if(is_next_clear) {
strm << std::endl << std::endl << std::endl; // clear logic
is_next_clear = false;
}
strm << obj;
return *this;
}
out& operator<<(const clear_line& _) {
is_next_clear = true;
return *this;
}
};
int main() {
out o;
o << "Some real output" << cls;
o << "Some other real output";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGNsZWFyX2xpbmUgeyB9IGNsczsKCmNsYXNzIG91dCB7CnByaXZhdGU6CglzdGQ6Om9zdHJlYW0gJnN0cm0gPSBzdGQ6OmNvdXQ7Cglib29sIGlzX25leHRfY2xlYXIgPSBmYWxzZTsKcHVibGljOgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CglvdXQmIG9wZXJhdG9yPDwoY29uc3QgVCYgb2JqKSB7CgkJaWYoaXNfbmV4dF9jbGVhcikgewoJCQlzdHJtIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGwgPDwgc3RkOjplbmRsOyAvLyBjbGVhciBsb2dpYwoJCQlpc19uZXh0X2NsZWFyID0gZmFsc2U7CgkJfQoJCQoJCXN0cm0gPDwgb2JqOwoJCXJldHVybiAqdGhpczsKCX0KCQoJb3V0JiBvcGVyYXRvcjw8KGNvbnN0IGNsZWFyX2xpbmUmIF8pIHsKCQlpc19uZXh0X2NsZWFyID0gdHJ1ZTsKCQlyZXR1cm4gKnRoaXM7Cgl9Cn07CgppbnQgbWFpbigpIHsKCW91dCBvOwoJbyA8PCAiU29tZSByZWFsIG91dHB1dCIgPDwgY2xzOwoJbyA8PCAiU29tZSBvdGhlciByZWFsIG91dHB1dCI7CgkKCXJldHVybiAwOwp9