C++11 で template alias が入ったことにより,テンプレートメタプログラミングでよく出てくる,メタ関数を評価するための typename ::type
を省略して直接型を取得するようなエイリアスが書けるようになりました.
template<bool B, class T> using enable_if_ = typename std::enable_if<B, T>::type; enable_if_<true, int> i; // typename std::enable_if<true, int>::type と同じ
C++14 ではこの要領で,値を評価するときに使う ::value
も省略できます.これには変数テンプレートを使います.
template<class T, class U> static constexpr bool is_same_ = std::is_same<T, U>::value; is_same_<int, int>; // std::is_same<int, int>::value と同じ
上のエイリアスと合わせると,かなりすっきりする気がします.
typename std::enable_if<std::is_same<int, int>::value, int>::type enable_if_<is_same_<int, int>, int>
よく ::value
を書かされるメタ関数については定義しておくと便利かもしれません.