C ++ Herencia múltiple: ¿por qué no trabaja?

stoy tratando de resolver un interesante problema de herencia múltiple.

El abuelo es una clase de interfaz con múltiples métodos:

class A
{
public:
    virtual int foo() = 0;
    virtual int bar() = 0;
};

Entonces hay clases abstractas que están completando parcialmente esta interfaz.

class B : public A
{
public:
    int foo() { return 0;}
};

class C : public A
{
public:
    int bar() { return 1;}
};

La clase que quiero usar hereda de los dos padres y especifica de qué método debería venir y usando directivas:

class D : public B, public C
{
public:
    using B::foo;
    using C::bar;
};

Cuando intento crear una instancia de D, obtengo errores al intentar crear una instancia de una clase abstracta.

int main()
{
    D d; //<-- Error cannot instantiate abstract class.

    int test = d.foo();
    int test2 = d.bar();

    return 0;
}

Puede alguien ayudarme a comprender el problema y cómo utilizar mejor las implementaciones parciales?

Respuestas a la pregunta(2)

Su respuesta a la pregunta