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;
}

[出力]

integral:c
integral:42
other:3.14

あと ::value って書くよりも {} の方が短いですよね。

[コンパイラ]

  • g++ (GCC) 4.7.0 20111210 (experimental)