Let's say I have the following class hierarchy:
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 spits out the following:
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)
Now, if I change this to get from a test base created from a known type (for example, class TestDerived : public virtual TestBase< int > , this fragment compiles just fine, so the problem seems to be related to the type of base the class is unknown at compile time.I did not create objects of any class anywhere, I do not understand why this should even matter.
Basically, how can I fix the error without resorting to -fpermissive ?
source share