#include <iostream>
using namespace std;
struct IStr
{
virtual std::ostream& beginMessage() = 0;
//virtual std::ostream& endMessage(std::ostream&) = 0;
};
struct MyStr : public IStr
{
std::ostream& beginMessage() override { return std::cout; }
static std::ostream& endMessage(std::ostream& ss) { return std::endl(ss); }
};
int main() {
IStr * pStr = new MyStr();
pStr->beginMessage() << "Hello World!" << MyStr::endMessage;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IElTdHIKewogICAgdmlydHVhbCBzdGQ6Om9zdHJlYW0mIGJlZ2luTWVzc2FnZSgpID0gMDsKICAgIC8vdmlydHVhbCBzdGQ6Om9zdHJlYW0mIGVuZE1lc3NhZ2Uoc3RkOjpvc3RyZWFtJikgPSAwOwp9OwoKc3RydWN0IE15U3RyIDogcHVibGljIElTdHIKewogICAgc3RkOjpvc3RyZWFtJiBiZWdpbk1lc3NhZ2UoKSBvdmVycmlkZSB7IHJldHVybiBzdGQ6OmNvdXQ7IH0KICAgIHN0YXRpYyBzdGQ6Om9zdHJlYW0mIGVuZE1lc3NhZ2Uoc3RkOjpvc3RyZWFtJiBzcykgeyByZXR1cm4gc3RkOjplbmRsKHNzKTsgfQp9OwoKaW50IG1haW4oKSB7CglJU3RyICogcFN0ciA9IG5ldyBNeVN0cigpOwoJcFN0ci0+YmVnaW5NZXNzYWdlKCkgPDwgIkhlbGxvIFdvcmxkISIgPDwgTXlTdHI6OmVuZE1lc3NhZ2U7CglyZXR1cm4gMDsKfQ==