C ++ Проблема множественного наследования с чисто виртуальными функциями

Я создал минимальный пример, чтобы воспроизвести проблему, которую я вижу, с более сложной структурой иерархии классов:

#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;
}

Компилирование сg++ --std=c++11 main.cpp&nbsp;выдает ошибку:

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;
         ^

Таким образом, компилятор считает, чтоPrint()&nbsp;чисто виртуальный.

Но я уточнил, чтоPrint()&nbsp;должен быть вclass E.

Итак, я неправильно понял некоторые правила наследования.

В чем мое недоразумение, и как я могу исправить эту проблему?

Примечание: он скомпилируется, если я удалю наследство: public D&nbsp;отclass F.