#include <cstdio>
template <class Writer>
class HiBye
{
public:
void say_hi() const
{
Writer::writeImpl("Hi");
}
void say_bye() const
{
Writer::writeImpl("Bye");
}
};
class ConsoleWriter
{
public:
static void writeImpl(const char* str)
{
printf("%s\n", str);
}
protected:
~ConsoleWriter() { }
};
int main()
{
HiBye<ConsoleWriter> h;
h.say_hi();
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KCnRlbXBsYXRlIDxjbGFzcyBXcml0ZXI+CmNsYXNzIEhpQnllCnsKcHVibGljOgp2b2lkIHNheV9oaSgpIGNvbnN0CnsKICBXcml0ZXI6OndyaXRlSW1wbCgiSGkiKTsKfQoKdm9pZCBzYXlfYnllKCkgY29uc3QKewogIFdyaXRlcjo6d3JpdGVJbXBsKCJCeWUiKTsKfQp9OwoKY2xhc3MgQ29uc29sZVdyaXRlcgp7CnB1YmxpYzoKc3RhdGljIHZvaWQgd3JpdGVJbXBsKGNvbnN0IGNoYXIqIHN0cikKewogIHByaW50ZigiJXNcbiIsIHN0cik7Cn0KCnByb3RlY3RlZDoKfkNvbnNvbGVXcml0ZXIoKSB7IH0KfTsKCmludCBtYWluKCkKewpIaUJ5ZTxDb25zb2xlV3JpdGVyPiBoOwpoLnNheV9oaSgpOwpyZXR1cm4gMDsKfQ==