5 #ifndef VCCC_TYPE_TRAITS_TEMPLATE_ARITY_HPP
6 #define VCCC_TYPE_TRAITS_TEMPLATE_ARITY_HPP
17 template<
template<
typename...>
class C,
typename TS,
typename =
void>
18 struct can_put_template : std::false_type {};
20 template<
template<
typename...>
class C,
typename... Args>
21 struct can_put_template<C, type_sequence<Args...>,
void_t<C<Args...>>> : std::true_type {};
23 template<
template<
typename...>
class C, std::size_t N,
bool = can_put_template<C, make_type_sequence<int, N>>
::value>
24 struct default_template_arity_impl;
26 template<
template<
typename...>
class C, std::size_t N>
27 struct default_template_arity_impl<C, N, true> : std::integral_constant<std::size_t, N> {};
29 template<
template<
typename...>
class C, std::size_t N>
30 struct default_template_arity_impl<C, N, false> : default_template_arity_impl<C, N + 1> {};
33 template<
typename...>
class C,
35 bool = can_put_template<C, make_type_sequence<int, Size>>
::value>
36 struct template_arity_impl;
38 template<
template<
typename...>
class C, std::size_t Size>
39 struct template_arity_impl<C, Size, true> : std::integral_constant<std::size_t, Size> {};
41 template<
template<
typename...>
class C, std::size_t Size>
42 struct template_arity_impl<C, Size, false> : template_arity_impl<C, Size - 1> {};
44 template<
template<
typename...>
class C>
45 struct template_arity_impl<C, 0, false> : std::integral_constant<std::size_t, static_cast<std::size_t>(-1)> {};
55 template<
template<
typename...>
class C, std::size_t MaxSize = 6>
60 template<
template<
typename...>
class C>
65 template<
template<
typename...>
class C, std::size_t MaxSize = 6>
67 : std::integral_constant<std::size_t, template_arity<C, MaxSize>::value - mandatory_template_arity<C>::value> {};
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
get default template parameter count of template class
Definition: template_arity.hpp:67
get mandatory template parameter count of template class
Definition: template_arity.hpp:61
get template parameter count of template class
Definition: template_arity.hpp:56