1#ifndef __DUNE_ACFEM_MPL_TYPEPACKELEMENT_HH__
2#define __DUNE_ACFEM_MPL_TYPEPACKELEMENT_HH__
5#include "../common/compiler.hh"
31#if DUNE_ACFEM_IS_CLANG(5,99)
32 static_assert(__has_builtin(__type_pack_element),
"");
34 template<std::size_t N,
class... T>
35 using TypePackElement = __type_pack_element<N, T...>;
38 template<std::size_t N,
class... T>
39 struct TypePackElementHelper
42 template<std::size_t N,
class T0,
class... TRest>
43 struct TypePackElementHelper<N, T0, TRest...>
44 : TypePackElementHelper<N-1, TRest...>
47 template<
class T0,
class... TRest>
48 struct TypePackElementHelper<0, T0, TRest...>
53 template<
class T0,
class T1,
class... TRest>
54 struct TypePackElementHelper<1, T0, T1, TRest...>
59 template<
class T0,
class T1,
class T2,
class... TRest>
60 struct TypePackElementHelper<2, T0, T1, T2, TRest...>
65 template<
class T0,
class T1,
class T2,
class T3,
class... TRest>
66 struct TypePackElementHelper<3, T0, T1, T2, T3, TRest...>
71 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class... TRest>
72 struct TypePackElementHelper<4, T0, T1, T2, T3, T4, TRest...>
77 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class... TRest>
78 struct TypePackElementHelper<5, T0, T1, T2, T3, T4, T5, TRest...>
83 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class... TRest>
84 struct TypePackElementHelper<6, T0, T1, T2, T3, T4, T5, T6, TRest...>
89 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class... TRest>
90 struct TypePackElementHelper<7, T0, T1, T2, T3, T4, T5, T6, T7, TRest...>
95 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class... TRest>
96 struct TypePackElementHelper<8, T0, T1, T2, T3, T4, T5, T6, T7, T8, TRest...>
101 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
class... TRest>
102 struct TypePackElementHelper<9, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, TRest...>
109 template<std::size_t N,
class... T>
110 using TypePackElement =
typename TypePackElementHelper<N, T...>::Type;