C++0x メタ関数のラップ

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

C++0x constexpr

C++0x Template Aliases