#include<type_traits>
template<class C, class T = int>
using EnableIf = typename std::enable_if<C::value, T>::type;
struct value1 { static const bool value = true; };
struct value2 { static const bool value = false; };
template<class T, EnableIf<std::is_integral<T>>...> // doesn't work
//template<class T, EnableIf<std::is_integral<T>> = 0> // works!
void fun(T){ };
template<class T, EnableIf<std::is_floating_point<T>>...> // doesn't work
//template<class T, EnableIf<std::is_floating_point<T>> = 0 > // works
void fun(T) { };
int main() {
fun(1);
}
I2luY2x1ZGU8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZTxjbGFzcyBDLCBjbGFzcyBUID0gaW50Pgp1c2luZyBFbmFibGVJZiA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEM6OnZhbHVlLCBUPjo6dHlwZTsKCnN0cnVjdCB2YWx1ZTEgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnN0cnVjdCB2YWx1ZTIgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOyB9OwoKdGVtcGxhdGU8Y2xhc3MgVCwgRW5hYmxlSWY8c3RkOjppc19pbnRlZ3JhbDxUPj4uLi4+IC8vIGRvZXNuJ3Qgd29yawovL3RlbXBsYXRlPGNsYXNzIFQsIEVuYWJsZUlmPHN0ZDo6aXNfaW50ZWdyYWw8VD4+ID0gMD4gLy8gd29ya3MhCnZvaWQgZnVuKFQpeyB9Owp0ZW1wbGF0ZTxjbGFzcyBULCBFbmFibGVJZjxzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFQ+Pi4uLj4gLy8gZG9lc24ndCB3b3JrCi8vdGVtcGxhdGU8Y2xhc3MgVCwgRW5hYmxlSWY8c3RkOjppc19mbG9hdGluZ19wb2ludDxUPj4gPSAwID4gLy8gd29ya3MKdm9pZCBmdW4oVCkgeyB9OwoKaW50IG1haW4oKSB7CiAgZnVuKDEpOwp9Cg==