Let\'s say I have the following class hierarchy:
template< class T >
class TestBase {
public:
virtual T const & do_foo() = 0;
};
template&l
Non-dependent names (that is, names which do not depend on template arguments), are looked up when parsing the template, not when instantiating it. You need to make do_foo
a dependent name. There are basically two ways to achieve this:
virtual int do_bar() {
return this->do_foo() + 1;
}
or
template< class T >
class TestDerived : public virtual TestBase< T > {
public:
using TestBase::do_foo;
virtual int do_bar() {
return do_foo() + 1;
}
};