Поиграв немного больше, я пришел к выводу, что это самый простой подход (работает в c ++ 14).Спасибо, что направили меня в правильном направлении:
template<typename T, typename F, size_t...indices>
auto map_impl( T && in, F && f, std::index_sequence<indices...> )
{
return std::make_tuple( f( std::get<indices>( in ) )... );
}
template<typename T, typename F>
auto map( T && in, F && f )
{
const size_t sz = std::tuple_size<std::decay_t<T>>::value;
return map_impl( std::forward<T>( in ), std::forward<F>( f ), std::make_index_sequence<sz>() );
}