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...>;