using type = TypeList<>;
};
- template <typename... TypesA, typename... TypesB>
- struct CombineHelper<TypeList<TypesA...>, TypeList<TypesB...> >
+ template <template <typename...> class TTypeListA, template <typename...> class TTypeListB, typename... TypesA, typename... TypesB>
+ struct CombineHelper<TTypeListA<TypesA...>, TTypeListB<TypesB...> >
{
using type = TypeList<TypesA..., TypesB...>;
};
{
};
- template <typename T, typename Type, typename... Types>
- struct ContainsHelper<T, TypeList<Type, Types...> > :
+ template <typename T, template <typename...> class TTypeList, typename Type, typename... Types>
+ struct ContainsHelper<T, TTypeList<Type, Types...> > :
std::conditional<
std::is_same<T, Type>::value,
std::true_type,
- ContainsHelper<T, TypeList<Types...> >
+ ContainsHelper<T, TTypeList<Types...> >
>::type
{
};
{
};
- template <typename Type, typename... Types, typename TTypeListB>
- struct ContainsAllHelper<TypeList<Type, Types...>, TTypeListB> :
+ template <template <typename...> class TTypeListA, typename Type, typename... Types, typename TTypeListB>
+ struct ContainsAllHelper<TTypeListA<Type, Types...>, TTypeListB> :
std::conditional<
Contains<Type, TTypeListB>::value,
ContainsAllHelper<TypeList<Types...>, TTypeListB>,
{
};
- template <typename T, typename... Types>
- struct IndexOf<T, TypeList<T, Types...> > :
+ template <typename T, template <typename...> class TTypeList, typename... Types>
+ struct IndexOf<T, TTypeList<T, Types...> > :
std::integral_constant<std::size_t, 0>
{
};
- template <typename T, typename Type, typename... Types>
- struct IndexOf<T, TypeList<Type, Types...> > :
+ template <typename T, template <typename...> class TTypeList, typename Type, typename... Types>
+ struct IndexOf<T, TTypeList<Type, Types...> > :
std::integral_constant<std::size_t, 1 +
- IndexOf<T, TypeList<Types...> >::value
+ IndexOf<T, TTypeList<Types...> >::value
>
{
};