18 #ifndef viskores_internal_Meta_h
19 #define viskores_internal_Meta_h
26 #include <type_traits>
45 template <
typename T1,
typename T2>
46 struct AndImpl : std::integral_constant<bool, T1::value && T2::value>
50 template <
typename T1,
typename T2>
51 struct OrImpl : std::integral_constant<bool, T1::value || T2::value>
56 struct NotImpl : std::integral_constant<bool, !T::value>
64 template <
typename T1,
typename T2>
65 using And =
typename detail::AndImpl<T1, T2>::type;
69 template <
typename T1,
typename T2>
70 using Or =
typename detail::OrImpl<T1, T2>::type;
75 using Not =
typename detail::NotImpl<T>::type;
86 #endif //viskores_internal_Meta_h