Template Aliases で enable_if を短くしてみた。
逆に違和感があってなんかアレ。
[ソース]
#include <type_traits> #include <iostream> template<bool B, typename T = void> using enable_if = typename std::enable_if<B, T>::type; template<bool B, typename T = void> using enabler_if = typename std::enable_if<B, T>::type*&; extern void* enabler; template<typename T, enabler_if<std::is_integral<T>{}> = enabler > void func(T x){ std::cout << "integral:" << x << std::endl; } template<typename T, enabler_if<!std::is_integral<T>{}> = enabler > void func(T x){ std::cout << "other:" << x << std::endl; } int main(){ func('c'); func(42); func(3.14f); return 0; }