元ネタ:Variadic Templates for C++0x(PDF)
zipは2つの型リストをペアにするメタ関数です。
template <class Sequence1, class Sequence2> struct zip; template <class ...Elements1, class ...Elements2> struct zip<std::tuple<Elements1...>, std::tuple<Elements2...>> { typedef std::tuple<std::pair<Elements1, Elements2>...> type; };
以下のように使用した場合には
typedef zip< tuple<int, string>, tuple<char, double> >::type type;
typeの型は以下のようになります。
tuple< pair<int, char>, pair<string, double> >