Como acessar o método protegido na classe base da classe derivada?

Aqui está um exemplo de código que me incomoda:

class Base {
  protected:
    virtual void foo() = 0;
};

class Derived : public Base {
  private:
    Base *b; /* Initialized by constructor, not shown here
                Intended to store a pointer on an instance of any derived class of Base */

  protected:
    virtual void foo() { /* Some implementation */ };
    virtual void foo2() {
      this->b->foo(); /* Compilator sets an error: 'virtual void Base::foo() is protected' */
    }
};

Como você acessa a função cancelada protegida?

Obrigado pela ajuda. : o)

questionAnswers(6)

yourAnswerToTheQuestion