#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(Base const * base)
{
	return static_cast<D3::D2 const *>(
		static_cast<D3 const *>(base));
}


int main()
{
	D3 d3;
	Base const *ptr = static_cast<D1 const *>(&d3);
	Base const *res = foo(ptr);
	static_cast<D2 const *>(res)->bar();
}