Re: Override a virtual function with a template?
On 1 Nov., 16:18, Jean-Louis Leroy <j...@yorel.be> wrote:
Visual Studio Express 2008 won't accept this program:
which is a conforming action.
#include <iostream>
using namespace std;
struct Base
{
virtual void test(int) = 0;
};
struct Derived : Base
{
template<typename T> void test(T)
{
cout << "ok\n";
}
};
int main()
{
Derived d;
d.test(0);
return 0;
}
...because 'void Base::test(int)' : is abstract. It may be right,
though. Templates are instantiated when used, I suppose the question
is: what does 'use' mean exactly.
Can someone point me to the part of the standard that is relevant to
my example?
14.5.2 [temp.mem]/4:
"A specialization of a member function template does not override a virtual
function from a base class.
[Example:
class B {
virtual void f(int);
};
class D : public B {
template <class T> void f(T); // does not override B::f(int)
void f(int i) { f<>(i); } // overriding function that calls
// the template instantiation
};"
HTH & Greetings from Bremen,
Daniel Kr?gler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]