11 #ifndef smtk_Metaprogramming_h
12 #define smtk_Metaprogramming_h
17 #include <type_traits>
35 template<
class B1,
class... Bn>
36 struct conjunction<B1, Bn...> : std::conditional<bool(B1::value), conjunction<Bn...>, B1>::type
54 template<
class B1,
class... Bn>
55 struct disjunction<B1, Bn...> : std::conditional<bool(B1::value), B1, disjunction<Bn...>>::type
62 struct negation : std::integral_constant<bool, !bool(B::value)>
68 template<
bool selector,
typename type_when_selector_true,
typename type_when_selector_false>
71 using type = type_when_selector_true;
74 template<
typename type_when_selector_true,
typename type_when_selector_false>
75 struct type_switch<false, type_when_selector_true, type_when_selector_false>
77 using type = type_when_selector_false;