可変引数テンプレートでの型リスト - replicate

TをN個含んだ型リストを生成するメタ関数です。

template <int N, class T>
struct replicate {
    typedef typename cons<T, typename replicate<N-1, T>::type>::type type;
};

template <class T>
struct replicate<0, T> {
    typedef tuple<> type;
};
replicate<3, int>::type
→ tuple<int, int, int>