Speeduino
Loading...
Searching...
No Matches
tuple.h
Go to the documentation of this file.
1#pragma once
2
3#include <tuple>
4
5namespace stdext {
6
8namespace details {
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> {}...);
13}
14
15template <size_t N, class F>
16constexpr auto index_apply(F f) {
17 return index_apply_impl(f, std::make_index_sequence<N>{});
18}
19}
21
29template <typename Tuple>
30constexpr auto pop_back(Tuple&& t) {
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!");
33
34 return details::index_apply<size-1>([&](auto... Is) {
35 return std::make_tuple(std::get<Is>(std::forward<Tuple>(t))...);
36 });
37}
38
39} // namespace stdext
Definition tuple.h:5
constexpr auto pop_back(Tuple &&t)
Remove the last element(s) from a tuple.
Definition tuple.h:30