C++11から入った std::tuple は,固定長の型を配列にできる.
例えば,
std::tuple<int, char, std::string> data;
のように,int,char,std::string型を要素に持つタプルができる.
タプルの i 番目の要素には std::get(data) でアクセスができる.
また, i 番目の要素の型は std::tuple_element>::type で取得できる.
ただ,std::tuple_element<0, std::tuple
これが必要になるのは,dataの型が,何かわからないタプルの場合.
こういうときは, decltype を使って,
template <int i> typename std::tuple_element<i,decltype(data)>::type test(){ return std::get<i>(data); }
のように書く.