15 #ifndef dealii_cxx14_utility_h 16 #define dealii_cxx14_utility_h 18 #include <deal.II/base/config.h> 22 #ifndef DEAL_II_WITH_CXX14 24 # include <type_traits> 27 DEAL_II_NAMESPACE_OPEN
30 #ifdef DEAL_II_WITH_CXX14 31 using std::index_sequence;
32 using std::index_sequence_for;
33 using std::make_index_sequence;
35 template <
size_t... Ints>
38 using type = index_sequence;
39 using value_type = size_t;
40 static constexpr std::size_t
43 return sizeof...(Ints);
50 template <
class Sequence1,
class Sequence2>
51 struct merge_and_renumber;
53 template <
size_t... I1,
size_t... I2>
54 struct merge_and_renumber<index_sequence<I1...>, index_sequence<I2...>>
55 : index_sequence<I1..., (sizeof...(I1) + I2)...>
60 template <std::
size_t N>
61 struct make_index_sequence : internal::merge_and_renumber<
62 typename make_index_sequence<N / 2>::type,
63 typename make_index_sequence<N - N / 2>::type>
67 struct make_index_sequence<0> : index_sequence<>
70 struct make_index_sequence<1> : index_sequence<0>
74 using index_sequence_for = make_index_sequence<
sizeof...(T)>;
77 DEAL_II_NAMESPACE_CLOSE
79 #endif // dealii_cxx14_memory_h