#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;
}