C++03 ではメタ関数の戻り値に ::value や ::type といったものを書かなければならないが
C++0x からはメタ関数を constexpr と Template Aliases でラップすることでより短く書くことができる
constexpr で値を返すメタ関数をラップ
template <int N> struct hoge_ { static const int value = N; }; constexpr int hoge(int n) { return hoge_<n>::value; } cout << hoge_<3>::value << endl; // C++03 cout << hoge(3) << endl; // C++0x
Template Aliases で型を返すメタ関数をラップ
template <class T> struct hoge_ { typedef T type; }; template <class T> using hoge = hoge_<T>::type; hoge_<int>::type value; // C++03 hoge<int> value; // C++0x