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

型リストから先頭N個を除外するメタ関数です。

template <int N, class Seq>
struct drop;

template <int N, class Head, class... Tail>
struct drop<N, tuple<Head, Tail...>> {
    typedef typename drop<N-1, tuple<Tail...>>::type type;
};

template <class Head, class... Tail>
struct drop<0, tuple<Head, Tail...>> {
    typedef tuple<Head, Tail...> type;
};
drop<3, tuple<int, double, long, char, void*>>::type
→ tuple<char, void*>