#include <iostream>
#include <string>
class Base
{
public :
virtual std:: string Foo( )
{
return "Base" ;
}
} ;
template < typename T>
class Derived : public Base
{
public :
typename std:: enable_if < std:: is_same < T, float > :: value , std:: string > :: type
virtual Foo( ) override
{
return "Derived" ;
}
} ;
int main( )
{
Derived< int > testInt;
std:: cout << testInt.Foo ( ) << std:: endl ;
Derived< float > testFloat;
std:: cout << testFloat.Foo ( ) << std:: endl ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKY2xhc3MgQmFzZQp7CnB1YmxpYzoKCXZpcnR1YWwgc3RkOjpzdHJpbmcgRm9vKCkKCXsKCQlyZXR1cm4gIkJhc2UiOwoJfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZQp7CnB1YmxpYzoKCXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBmbG9hdD46OnZhbHVlLCBzdGQ6OnN0cmluZz46OnR5cGUgCgl2aXJ0dWFsIEZvbygpIG92ZXJyaWRlCgl7CgkJcmV0dXJuICJEZXJpdmVkIjsKCX0KfTsKCmludCBtYWluKCkKewoJRGVyaXZlZDxpbnQ+IHRlc3RJbnQ7CglzdGQ6OmNvdXQgPDwgdGVzdEludC5Gb28oKSA8PCBzdGQ6OmVuZGw7CgoJRGVyaXZlZDxmbG9hdD4gdGVzdEZsb2F0OwoJc3RkOjpjb3V0IDw8IHRlc3RGbG9hdC5Gb28oKSA8PCBzdGQ6OmVuZGw7Cn0=