Skip to content

Instantly share code, notes, and snippets.

@dgodfrey206
Last active August 29, 2015 14:07
Show Gist options
  • Save dgodfrey206/fd704c5ec058efa68ca9 to your computer and use it in GitHub Desktop.
Save dgodfrey206/fd704c5ec058efa68ca9 to your computer and use it in GitHub Desktop.
A right heterogeneous fold on variadic tuples.
#include <tuple>
#include <type_traits>
#include <utility>
#include <integer_sequence>
template <class F, class Tuple, size_t... I>
auto tuple_map_impl(F f, Tuple&& t, index_sequence<I...>)
{
return std::make_tuple(f(std::get<I>(std::forward<Tuple>(t)))...);
}
template <class F, class Tuple, class... Tuples>
auto tuple_map(F f, Tuple&& t, Tuples&&... tuples)
{
return std::tuple_cat(tuple_map_impl(f, std::forward<Tuple>(t),
std::make_index_sequence<std::tuple_size<std::decay_t<Tuple>>::value>{}),
tuple_map(f, tuples...)
);
}
template <class F>
auto tuple_map(F) { return std::make_tuple(); }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment