#include <iostream>
using namespace std;
struct Base
{
};
struct D1 : Base
{
};
struct D2 : Base
{
void bar() const
{
std::cout << "D2::bar" << std::endl;
}
};
struct D3 : D1, D2
{
};
Base const * foo(D3 const * d3)
{
return static_cast<const D2*>(d3);
}
int main()
{
D3 d3;
Base const *res = foo(&d3);
static_cast<D2 const *>(res)->bar();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEJhc2UKewoJCn07CgpzdHJ1Y3QgRDEgOiBCYXNlCnsKCQp9OwpzdHJ1Y3QgRDIgOiBCYXNlCnsKCXZvaWQgYmFyKCkgY29uc3QKCXsKCQlzdGQ6OmNvdXQgPDwgIkQyOjpiYXIiIDw8IHN0ZDo6ZW5kbDsKCX0KfTsKCnN0cnVjdCBEMyA6IEQxLCBEMgp7CgkKfTsKCkJhc2UgY29uc3QgKiBmb28oRDMgY29uc3QgKiBkMykKewoJcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEQyKj4oZDMpOwp9CgoKaW50IG1haW4oKQp7CglEMyBkMzsKCUJhc2UgY29uc3QgKnJlcyA9IGZvbygmZDMpOwoJc3RhdGljX2Nhc3Q8RDIgY29uc3QgKj4ocmVzKS0+YmFyKCk7Cn0=