solve diamond inheritance c++

#include <iostream>

class A {
public:
    A() {
        std::cout << "A constructor" << std::endl;
    }

    ~A() {
        std::cout << "A destructor" << std::endl;
    }
};

class B : virtual public A {
public:
    B() {
        std::cout << "B constructor" << std::endl;
    }

    ~B() {
        std::cout << "B destructor" << std::endl;
    }
};

class C : virtual public A {
public:
    C() {
        std::cout << "C constructor" << std::endl;
    }

    ~C() {
        std::cout << "C destructor" << std::endl;
    }
};

class D : public B, public C {
public:
    D() {
        std::cout << "D constructor" << std::endl;
    }

    ~D() {
        std::cout << "D destructor" << std::endl;
    }
};

int main() {
    D d;
    return 0;
}