In C++ the diamond problem can be solved by using virtual public inheritance. With virtual public inheritance the base class is inherited only once:
class A {...};
class B : virtual public A {...};
class C : virtual public A {...};
class D : public B, public C {...};