9template <
class F,
size_t... Is>
10constexpr auto index_apply_impl(F f,
11 std::index_sequence<Is...>) {
12 return f(std::integral_constant<size_t, Is> {}...);
15template <
size_t N,
class F>
16constexpr auto index_apply(F f) {
17 return index_apply_impl(f, std::make_index_sequence<N>{});
29template <
typename Tuple>
31 constexpr std::size_t size = std::tuple_size<std::decay_t<Tuple>>::value;
32 static_assert(size > 0,
"Cannot pop from an empty tuple!");
34 return details::index_apply<size-1>([&](
auto... Is) {
35 return std::make_tuple(std::get<Is>(std::forward<Tuple>(t))...);