#include <type_traits>
#include <iostream>
enum class enabler {};
template <typename T>
using EnableIf = typename std::enable_if<T::value, enabler>::type;
template <typename T>
using DisableIf = typename std::enable_if<!T::value, enabler>::type;
template <typename T, EnableIf<std::is_polymorphic<T>> = {}>
void f(T) { std::cout << "is polymorphic\n"; }
template <typename T, DisableIf<std::is_polymorphic<T>> = {}>
void f(T) { std::cout << "is not polymorphic\n"; }
struct foo { virtual void g() {} };
int main() {
f(foo {});
f(int {});
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8aW9zdHJlYW0+CgplbnVtIGNsYXNzIGVuYWJsZXIge307Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KdXNpbmcgRW5hYmxlSWYgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxUOjp2YWx1ZSwgZW5hYmxlcj46OnR5cGU7CnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp1c2luZyBEaXNhYmxlSWYgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhVDo6dmFsdWUsIGVuYWJsZXI+Ojp0eXBlOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIEVuYWJsZUlmPHN0ZDo6aXNfcG9seW1vcnBoaWM8VD4+ID0ge30+CnZvaWQgZihUKSB7IHN0ZDo6Y291dCA8PCAiaXMgcG9seW1vcnBoaWNcbiI7IH0KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBEaXNhYmxlSWY8c3RkOjppc19wb2x5bW9ycGhpYzxUPj4gPSB7fT4Kdm9pZCBmKFQpIHsgc3RkOjpjb3V0IDw8ICJpcyBub3QgcG9seW1vcnBoaWNcbiI7IH0KCnN0cnVjdCBmb28geyB2aXJ0dWFsIHZvaWQgZygpIHt9IH07CgppbnQgbWFpbigpIHsKICAgIGYoZm9vIHt9KTsKICAgIGYoaW50IHt9KTsKfQo=