11 #include <type_traits> 15 template<
typename ID,
typename T, T value>
25 template<
typename ID,
typename T>
31 template<
typename ID,
template<
typename>
class T>
40 template<
typename D,
typename... Args>
43 template<
typename D,
typename T2,
typename... Args>
45 template<
typename D2,
typename T22,
typename Enable =
void>
47 : std::integral_constant<decltype(D::value), get_value<D, Args...>::value> {};
49 template<
typename D2,
typename T22>
50 struct impl <D2, T22, typename std::enable_if<std::is_same<typename D2::type_id, typename T22::type_id>::value>::type>
51 : std::integral_constant<decltype(D::value), T22::value> {};
53 static constexpr
const auto value = impl<D, T2>::value;
57 struct get_value<D> : std::integral_constant<decltype(D::value), D::value> {};
60 template<
typename D,
typename... Args>
63 template<
typename D,
typename T2,
typename... Args>
65 template<
typename D2,
typename T22,
typename Enable =
void>
70 template<
typename D2,
typename T22>
71 struct impl <D2, T22, typename std::enable_if<std::is_same<typename D2::type_id, typename T22::type_id>::value>::type> {
72 using value =
typename T22::value;
80 using value =
typename D::value;
83 template<
typename D,
typename... Args>
86 template<
typename D,
typename T2,
typename... Args>
88 template<
typename D2,
typename T22,
typename Enable =
void>
94 template<
typename D2,
typename T22>
95 struct impl <D2, T22, typename std::enable_if<std::is_same<typename D2::type_id, typename T22::type_id>::value>::type> {
110 template<
typename T1,
typename... Args>
113 template<
typename T1,
typename T2,
typename... Args>
114 struct is_present<T1, T2, Args...> : std::integral_constant<bool, std::is_same<T1, T2>::value || is_present<T1, Args...>::value> {};
116 template<
typename T1>
120 template<
typename... Valid>
123 struct contains : std::integral_constant<bool, is_present<typename T::type_id, Valid...>::value> {};
126 template<
typename L,
typename... Args>
129 template<
typename L,
typename T1,
typename... Args>
130 struct is_valid <L, T1, Args...> : std::integral_constant<bool, L::template contains<T1>::value && is_valid<L, Args...>::value> {};
typename T22::template value< C > value
typename D::template value< C > value
typename impl< D, T2 >::template value< C > value
typename get_type< D, Args... >::value value
typename impl< D, T2 >::value value
typename T22::value value
detail::Latex_output_ID type_id
typename get_template_type< D, Args... >::template value< C > value
The stator library namespace.
detail::expand_Constants_to_ID type_id