::value を短くする
最近、よく使っているんですが、std::integral_constant は、
constexpr operator value_ type() { return value; }
を定義しているのでこんな感じで渡すことも出来ます。
[ソース]
#include <iostream> #include <type_traits> extern void* enabler; template<bool B, typename T = void> using enabler_if = typename std::enable_if<B, T>::type*&; template< typename T, enabler_if<std::is_integral<T>{}> = enabler > void func(T){ std::cout << "integral" << std::endl; } template< typename T, enabler_if<!std::is_integral<T>{}> = enabler > void func(T){ std::cout << "no integral" << std::endl; } int main(){ // ::value ではなくて、{} を使う static_assert(std::is_same<int, int>{}, ""); static_assert(!std::is_same<int, char>{}, ""); func(42); func('c'); func(3.14f); return 0; }
[出力]
integral integral no integral
少し読みやすくなったかしら。