33#ifndef LIBPMEMOBJ_INTEGER_SEQUENCE_HPP
34#define LIBPMEMOBJ_INTEGER_SEQUENCE_HPP
52template <
typename T, T...>
53struct integer_sequence {
59template <
size_t... Indices>
60using index_sequence = integer_sequence<size_t, Indices...>;
67template <
typename T, T I,
typename... Types>
68struct make_integer_seq_impl;
73template <
typename T, T I, T... Indices>
74struct make_integer_seq_impl<T, I, integer_sequence<T, Indices...>> {
75 typedef integer_sequence<T, Indices...> type;
81template <
typename N, N I, N... Indices,
typename T,
typename... Types>
82struct make_integer_seq_impl<N, I, integer_sequence<N, Indices...>, T,
84 typedef typename make_integer_seq_impl<
85 N, I + 1, integer_sequence<N, Indices..., I>, Types...>::type
92template <
typename... Types>
93using make_index_sequence =
94 make_integer_seq_impl<size_t, 0, integer_sequence<size_t>, Types...>;