Herança virtual: Erro: nenhuma substituição final exclusiva

Eu sei que a herança virtual é abordada aqui antes e antes de fazer essa pergunta, examinei os detalhes da herança virtual e os detalhes de um problema semelhante, como os seguintes:

A herança múltipla de diamantes compila sem virtual, mas não com epor que o gcc me deu um erro - final overrider

Meu problema é um pouco diferente, pois não estou usando função virtual pura e explicitamente usando herança virtual para ter uma classe 'Base' exclusiva. A hierarquia é a seguinte:

   Base
    /\
   /  \
 Der1 Der2
   \  /
   Der3

Eu sei sobre o terrível diamante na questão da derivação e é por isso que estou usando herança virtual.

#include <iostream>
class base
{
public :

    base()
    {
        std::cout<<"base()" << std::endl;
    }
    virtual void fun()
    {
        std::cout<<"base" << std::endl;
    }
};

class der1: virtual public base
{
public :
    void fun()
    {
        std::cout<<"der1" << std::endl;
    }
};

class der2 : virtual public base
{
public :
    void fun()
    {
        std::cout<<"der2" << std::endl;
    }
};

class der3 : public der1,public der2
{
    public :
    /*void fun()
    {
        std::cout<<"der3" << std::endl;
    }*/
    //if I took out the comment and the function 
    //is defined it compiles fine as expected
};

int main()
{
    base *p=new der3;
    //used scope operation explicitly to avoid ambiguity
    p->base::fun(); //here it complains about 'no unique final overrider for fun'
    return 0;
}

Meu entendimento é que, como estou usando herança virtual, deve haver apenas uma instância da 'base' e, usando o operador de escopo, posso invocar sem ambiguidade a função de diversão virtual. A função não é virtual pura. Se eu sair e implementar na classe 'der3', ele está me dando um erro de compilador:

erro: nenhuma substituição final exclusiva para 'base de vácuo virtual :: fun ()' no 'der3'

Eu posso ver como esse problema funciona (overrider final) Mas o meu não. Está ficando confuso entreBase::fun, der1::fun eder2::fun? O operador do escopo ajuda de qualquer maneira?

Qualquer pista ou ajuda é apreciada. Estou usando o g ++ 4.6.3.

questionAnswers(2)

yourAnswerToTheQuestion