#include <iostream>
using namespace std;
struct B
{
int b;
virtual ~B() {};
virtual void show() { std::cout << "B::show();\n"; };
};
struct X: virtual public B
{
int x;
};
struct Y: virtual public B
{
int y;
};
struct C: virtual public X, virtual public Y
{
/*virtual*/ void show() { std::cout << "C::show()\n"; };
};
typedef unsigned long lParam;
void showMeC( lParam lp )
{
C *self = (C*) lp;
self->show();
}
int main() {
C *c = new C;
showMeC( (lParam)c );
delete c;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEIgCnsKCWludCBiOwoJdmlydHVhbCB+QigpIHt9OwoJdmlydHVhbCB2b2lkIHNob3coKSB7IHN0ZDo6Y291dCA8PCAiQjo6c2hvdygpO1xuIjsgfTsKfTsKCnN0cnVjdCBYOiB2aXJ0dWFsIHB1YmxpYyBCCnsKCWludCB4Owp9OwoKc3RydWN0IFk6IHZpcnR1YWwgcHVibGljIEIKewoJaW50IHk7Cn07CgpzdHJ1Y3QgQzogdmlydHVhbCBwdWJsaWMgWCwgdmlydHVhbCBwdWJsaWMgWQp7CgkvKnZpcnR1YWwqLyB2b2lkIHNob3coKSB7IHN0ZDo6Y291dCA8PCAiQzo6c2hvdygpXG4iOyB9Owp9OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxQYXJhbTsKCnZvaWQgc2hvd01lQyggbFBhcmFtIGxwICkKewoJQyAqc2VsZiA9IChDKikgbHA7CglzZWxmLT5zaG93KCk7Cn0KCmludCBtYWluKCkgewoJQyAqYyA9IG5ldyBDOwoJc2hvd01lQyggKGxQYXJhbSljICk7CglkZWxldGUgYzsKCXJldHVybiAwOwp9