mapはメタ関数を受け取る高階メタ関数で
型リストの全ての型に、パラメータで受け取ったメタ関数を適用します。
template <template <class T> class F, class... Seq> struct map; template <template <class T> class F, class... Seq> struct map<F, tuple<Seq...>> { typedef tuple<typename F<Seq>::type...> type; };
template <class T> struct add_pointer { typedef T* type; }; map<add_pointer, tuple<int, double, long>>::type → tuple<int*, double*, long*>