3 #ifndef WIBBLE_SFINAE_H
4 #define WIBBLE_SFINAE_H
18 static const bool value =
false;
22 template<
typename A,
typename B >
24 static const bool value =
false;
27 template<
typename A >
32 template<
bool,
bool,
bool = true,
bool = true,
bool = true >
34 static const bool value =
false;
38 struct TAndC< true, true, true, true, true > {
42 template<
typename A,
typename B,
44 struct TAnd :
TAndC< A::value, B::value, C::value, D::value, E::value > {};
46 template<
bool,
bool,
bool = false,
bool = false,
bool = false >
52 struct TOrC< false, false, false, false, false > {
53 static const bool value =
false;
56 template<
typename A,
typename B,
58 struct TOr :
TOrC< A::value, B::value, C::value, D::value, E::value > {};
65 template<
bool a >
struct TNotC {
69 template<
typename T >
struct TNot :
TNotC< T::value > {};
71 template<
bool a,
bool b >
74 template<
typename A,
typename B >
77 template<
bool,
typename T = Unit >
80 template<
typename Type >
83 template<
bool,
typename T = Unit >
86 template<
typename Type >
89 template<
typename X,
typename T = Unit >
92 template<
typename X,
typename T = Unit >
95 template<
typename A,
typename B >