C ++ Um problema de herança múltipla com funções virtuais puras

Eu produzi um exemplo mínimo para replicar o problema que estou vendo com uma estrutura de hierarquia de classes mais complexa:

#include <string>
#include <iostream>


class A
{
protected:

    virtual
    ~A() = 0;

};

inline
A::~A() {}

class B : public A
{
public:

    virtual
    ~B()
    {
    }

    std::string B_str;
};

class BB : public A
{
public:

    virtual
    ~BB()
    {
    }

    std::string BB_str;
};

class C : public A
{
protected:

    virtual
    ~C()
    {
    }

    virtual
    void Print() const = 0;
};

class D : public B, public BB, public C
{
public:

    virtual
    ~D()
    {
    }
};

class E : public C
{
public:

    void Print() const
    {
        std::cout << "E" << std::endl;
    }
};

class F : public E, public D
{
public:

    void Print_Different() const
    {
        std::cout << "Different to E" << std::endl;
    }

};


int main()
{

    F f_inst;

    return 0;
}

Compilando comg++ --std=c++11 main.cpp produz o erro:

error: cannot declare variable ‘f_inst’ to be of abstract type ‘F’

    F f_inst;

note:   because the following virtual functions are pure within ‘F’:

    class F : public E, public D
          ^
note:   virtual void C::Print() const

    void Print() const = 0;
         ^

Então o compilador pensa quePrint() é puro virtual.

Mas eu especifiquei o quePrint() deve estar emclass E.

Então, eu não entendi algumas das regras de herança.

Qual é o meu mal-entendido e como posso corrigir esse problema?

Nota: Ele será compilado se eu remover a herança: public D declass F.

questionAnswers(1)

yourAnswerToTheQuestion