38 #ifndef LIBPMEMOBJ_CPP_INTEGER_SEQUENCE_HPP
39 #define LIBPMEMOBJ_CPP_INTEGER_SEQUENCE_HPP
52 template <
typename T, T...>
53 struct integer_sequence {
59 template <
size_t... Indices>
60 using index_sequence = integer_sequence<size_t, Indices...>;
67 template <
typename T, T I,
typename... Types>
68 struct make_integer_seq_impl;
73 template <
typename T, T I, T... Indices>
74 struct make_integer_seq_impl<T, I, integer_sequence<T, Indices...>> {
75 typedef integer_sequence<T, Indices...> type;
81 template <
typename N, N I, N... Indices,
typename T,
typename... Types>
82 struct 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
92 template <
typename... Types>
93 using make_index_sequence =
94 make_integer_seq_impl<size_t, 0, integer_sequence<size_t>, Types...>;