型リストのI番目の型を取得するメタ関数です
template <int I, typename Arg> struct at; template <int I, typename Head, typename... Tail> struct at<I, tuple<Head, Tail...>> { typedef typename at<I - 1, tuple<Tail...>>::type type; }; template <class Head, typename... Tail> struct at<0, tuple<Head, Tail...>> { typedef Head type; };
at<0, tuple<int, double, long>>::type → int
at<1, tuple<int, double, long>>::type → double
at<2, tuple<int, double, long>>::type → long
GCC 4.4 20090320だとこういう部分特殊化ができない
template <int I, typename Head, typename... Tail> struct at<I, Head, Tail...> { // エラー!sorry, not implementation... typedef typename at<I - 1, tuple<Tail...>>::type type; };
コンパイラのバグ(未実装)かな。
まだスナップショット版だし。