#include <iostream>
class Surface
{
public:
virtual ~Surface() {}
virtual void Draw() = 0;
};
class Display : virtual public Surface
{
};
class Surface_OpenGL : virtual public Surface
{
public:
void Draw()
{
std::cout << __PRETTY_FUNCTION__ << '\n';
}
};
class Display_OpenGL : public Display, public Surface_OpenGL
{
};
int main ()
{
Display *display = new Display_OpenGL();
display->Draw();
delete display;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgU3VyZmFjZQp7CnB1YmxpYzoKICAgIHZpcnR1YWwgflN1cmZhY2UoKSB7fQogICAgCiAgICB2aXJ0dWFsIHZvaWQgRHJhdygpID0gMDsKfTsKCmNsYXNzIERpc3BsYXkgOiB2aXJ0dWFsIHB1YmxpYyBTdXJmYWNlCnsKfTsKCmNsYXNzIFN1cmZhY2VfT3BlbkdMIDogdmlydHVhbCBwdWJsaWMgU3VyZmFjZQp7CnB1YmxpYzoKICAgIHZvaWQgRHJhdygpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgJ1xuJzsKICAgIH0KfTsKCmNsYXNzIERpc3BsYXlfT3BlbkdMIDogcHVibGljIERpc3BsYXksIHB1YmxpYyBTdXJmYWNlX09wZW5HTAp7Cn07CgppbnQgbWFpbiAoKQp7CiAgICBEaXNwbGF5ICpkaXNwbGF5ID0gbmV3IERpc3BsYXlfT3BlbkdMKCk7CiAgICAKICAgIGRpc3BsYXktPkRyYXcoKTsKICAgIGRlbGV0ZSBkaXNwbGF5OwogICAgcmV0dXJuIDA7Cn0=