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

2つの型リストを連結するメタ関数です。

template <class Seq1, class Seq2>
struct concat;

template <class... Seq1, class... Seq2>
struct concat<tuple<Seq1...>, tuple<Seq2...>> {
    typedef tuple<Seq1..., Seq2...> type;
};
concat<tuple<int, double>, tuple<long, char>>::type
→ tuple<int, double, long, char>