#include <iostream>
#include <type_traits>
#include <utility>
// Mutually exclusive enable_if test
template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0>
void foo(T)
{
std::cout << "Integral\n";
}
template<typename T, typename std::enable_if<! std::is_integral<T>::value && sizeof(T) <= 4, int>::type = 0>
void foo(T)
{
std::cout << "Not integral, <= 4\n";
}
template<typename T, typename std::enable_if<! std::is_integral<T>::value && (sizeof(T) > 4), int>::type = 0>
void foo(T)
{
std::cout << "Not integral, > 4\n";
}
int main()
{
foo(3);
foo(0.0);
foo(0.0f);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CiNpbmNsdWRlIDx1dGlsaXR5PgoKLy8gTXV0dWFsbHkgZXhjbHVzaXZlIGVuYWJsZV9pZiB0ZXN0CnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4Kdm9pZCBmb28oVCkKewogICAgc3RkOjpjb3V0IDw8ICJJbnRlZ3JhbFxuIjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8ISBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJiBzaXplb2YoVCkgPD0gNCwgaW50Pjo6dHlwZSA9IDA+CnZvaWQgZm9vKFQpCnsKICAgIHN0ZDo6Y291dCA8PCAiTm90IGludGVncmFsLCA8PSA0XG4iOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlICYmIChzaXplb2YoVCkgPiA0KSwgaW50Pjo6dHlwZSA9IDA+CnZvaWQgZm9vKFQpCnsKICAgIHN0ZDo6Y291dCA8PCAiTm90IGludGVncmFsLCA+IDRcbiI7Cn0KCmludCBtYWluKCkKewogICAgZm9vKDMpOwogICAgZm9vKDAuMCk7CiAgICBmb28oMC4wZik7Cn0=