#include <type_traits>
class B {};
class X : B {};
class Y {};
template <typename T, typename std::enable_if<std::is_base_of<B, T>::value>::type* = nullptr>
class A
{
A() = default;
};
template class A<X>;
// template class A<Y>; # will not compile
int main() {}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKY2xhc3MgQiAgICAge307CmNsYXNzIFggOiBCIHt9OwpjbGFzcyBZICAgICB7fTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Jhc2Vfb2Y8QiwgVD46OnZhbHVlPjo6dHlwZSogPSBudWxscHRyPgpjbGFzcyBBCnsKICAgIEEoKSA9IGRlZmF1bHQ7Cn07CgogICB0ZW1wbGF0ZSBjbGFzcyBBPFg+OwovLyB0ZW1wbGF0ZSBjbGFzcyBBPFk+OyAjIHdpbGwgbm90IGNvbXBpbGUKCmludCBtYWluKCkge30=