#include <iostream>
#include <type_traits>
template <typename T>
struct A {
int val = 0;
template<typename Integer, typename std::enable_if<T::value && std::is_convertible<Integer,int>::value>::type...>
A(Integer n) : val(n) {};
A(...) {}
/* ... */
};
struct YES { constexpr static bool value = true; };
struct NO { constexpr static bool value = false; };
int main() {
A<YES> y(10);
A<NO> n;
std::cout << "YES: " << y.val << std::endl
<< "NO: " << n.val << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IEEgewogICAgaW50IHZhbCA9IDA7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdlciwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8VDo6dmFsdWUgJiYgc3RkOjppc19jb252ZXJ0aWJsZTxJbnRlZ2VyLGludD46OnZhbHVlPjo6dHlwZS4uLj4KICAgIEEoSW50ZWdlciBuKSA6IHZhbChuKSB7fTsKICAgIAogICAgQSguLi4pIHt9CiAgICAvKiAuLi4gKi8KfTsKCnN0cnVjdCBZRVMgeyBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSB0cnVlOyB9OwpzdHJ1Y3QgTk8geyBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKCmludCBtYWluKCkgewogICAgQTxZRVM+IHkoMTApOwogICAgQTxOTz4gbjsKICAgIHN0ZDo6Y291dCA8PCAiWUVTOiAiIDw8IHkudmFsIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICJOTzogICIgPDwgbi52YWwgPDwgc3RkOjplbmRsOwp9