Вызов метода базового класса в шаблонной иерархии виртуальных классов

Позволять'скажем, у меня есть следующая иерархия классов:

template< class T >
class TestBase {

public:

    virtual T const & do_foo() = 0;

};

template< class T >
class TestDerived : public virtual TestBase< T > {

public:

    virtual int do_bar() {
        return do_foo() + 1;
    }

};

GCC выкладывает следующее:

error: there are no arguments to ‘do_foo’ that depend on a template parameter, so a declaration of ‘do_foo’ must be available [-fpermissive]
note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)

Теперь, если я изменю это, чтобы получить из TestBase, созданного из известного типа (например,class TestDerived : public virtual TestBase< int >этот фрагмент прекрасно компилируется, поэтому проблема, очевидно, связана с тем, что тип базового класса неизвестен во время компиляции. Но так как я нене создавать экземпляры объектов любого класса, я нене понимаю, почему это должно иметь значение.

В основном, как бы я разрешил ошибку, не прибегая к помощи?-fpermissive

Ответы на вопрос(2)

Ваш ответ на вопрос