16 #include <type_traits>
22 template <
typename... Packs>
23 struct merge_packs_impl;
25 template <
typename T,
template <
typename>
class Macher>
26 struct filter_pack_impl;
28 template <
typename Pack>
29 struct unique_filter_pack_impl;
31 template <
typename Pack,
template <
typename>
class Matcher, std::size_t Position, std::size_t Index = 0>
32 struct find_pack_impl;
37 template <
typename Type, std::
size_t Size>
38 struct make_values_impl;
40 template <
typename Pack,
template <
typename,
typename>
class LessThan>
41 struct sort_pack_impl;
50 template <
typename... Types>
56 enum { size =
sizeof... (Types) };
81 template <
typename... Packs>
82 using merge_packs =
typename detail::merge_packs_impl <Packs...>::type;
101 template <
typename Pack,
template <
typename>
class Matcher>
102 using filter_pack =
typename detail::filter_pack_impl <Pack, Matcher>::type;
120 template <
typename Values,
template <
typename>
class Matcher>
121 using unique_filter_pack =
typename detail::unique_filter_pack_impl <filter_pack <Values, Matcher>>::type;
135 template <
typename Pack,
template <
typename>
class Matcher, std::size_t Position = 0>
136 using find_pack = std::integral_constant <std::size_t, detail::find_pack_impl <Pack, Matcher, Position>::value>;
140 template <
typename Lhs,
typename Rhs>
141 struct value_less_than_impl
144 typename std::conditional <
145 (Lhs::value < Rhs::value),
162 template <
typename Lhs,
typename Rhs>
171 template <
typename Pack,
template <
typename,
typename>
class LessThan =
value_less_than>
172 using sort_pack =
typename detail::sort_pack_impl <Pack, LessThan>::type;
188 template <
typename Type, std::
size_t Size>
189 using make_values =
typename detail::make_values_impl <Type, Size>::type;
202 template <std::
size_t Size>
203 using make_indices =
typename detail::make_values_impl <std::size_t, Size>::type;
206 #include <framework/common/pack_container.inl>