#include <type_traits>
#include <iostream>
class Base
{};
class Derived : public Base
{};
template <class T, class Enabler=void>
class Partialy
{
public:
void say()
{
std::cout << "Partialy Default" << std::endl;
}
};
template <class T>
class Partialy<T, typename std::enable_if<std::is_base_of< Base, T >::value>::type>
{
public:
void say()
{
std::cout << "Partialy special" << std::endl;
}
};
int main(void)
{
Derived a;
Partialy<Derived> b;
b.say();
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8aW9zdHJlYW0+CmNsYXNzIEJhc2UKe307CmNsYXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZQp7fTsKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEVuYWJsZXI9dm9pZD4KY2xhc3MgUGFydGlhbHkKewpwdWJsaWM6Cgl2b2lkIHNheSgpCgl7CgkJc3RkOjpjb3V0IDw8ICJQYXJ0aWFseSBEZWZhdWx0IiA8PCBzdGQ6OmVuZGw7Cgl9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFBhcnRpYWx5PFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZjwgQmFzZSwgVCA+Ojp2YWx1ZT46OnR5cGU+CnsKcHVibGljOgoJdm9pZCBzYXkoKQoJewoJCXN0ZDo6Y291dCA8PCAiUGFydGlhbHkgc3BlY2lhbCIgPDwgc3RkOjplbmRsOwoJfQp9OwoKaW50IG1haW4odm9pZCkKewoJRGVyaXZlZCBhOwoJUGFydGlhbHk8RGVyaXZlZD4gYjsKCWIuc2F5KCk7Cn0=