#include <stdio.h>
class Base
{
public :
Base( ) { }
virtual ~Base( ) { }
virtual bool match( const void * data ) const { return false ; }
} ;
template < class Type>
class Derived: public Base
{
public :
Derived( ) : Base( ) { }
~Derived( ) override{ }
virtual bool match( const Type * data ) const override { return true ; }
} ;
int main( int argc, char ** argv)
{
Derived< int > * d = new Derived< int > ( ) ;
Base * b = d;
int i;
printf ( "B match = %s\n " ,b- > match( & i) ? "True" : "False" ) ;
printf ( "D match = %s\n " ,d- > match( & i) ? "True" : "False" ) ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpjbGFzcyBCYXNlCnsKICAgcHVibGljOgogICAgICBCYXNlKCkge30KICAgICAgdmlydHVhbCB+QmFzZSgpe30KCiAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaCggY29uc3Qgdm9pZCAqZGF0YSApIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY2xhc3MgRGVyaXZlZDogcHVibGljIEJhc2UKewogICBwdWJsaWM6CiAgICAgIERlcml2ZWQoKTpCYXNlKCkge30KICAgICAgfkRlcml2ZWQoKSBvdmVycmlkZXt9CgogICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2goIGNvbnN0IFR5cGUgKmRhdGEgKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cn07CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKICAgRGVyaXZlZDxpbnQ+ICpkID0gbmV3IERlcml2ZWQ8aW50PigpOwogICBCYXNlICpiICAgICAgICAgPSBkOwoKICAgaW50IGk7CiAgIHByaW50ZigiQiBtYXRjaCA9ICVzXG4iLGItPm1hdGNoKCZpKT8iVHJ1ZSI6IkZhbHNlIik7CiAgIHByaW50ZigiRCBtYXRjaCA9ICVzXG4iLGQtPm1hdGNoKCZpKT8iVHJ1ZSI6IkZhbHNlIik7Cn0K
compilation info
prog.cpp: In instantiation of 'class Derived<int>':
prog.cpp:24:39: required from here
prog.cpp:19:20: error: 'bool Derived<Type>::match(const Type*) const [with Type = int]' marked 'override', but does not override
virtual bool match( const Type *data ) const override { return true; }
^
stdout