3 #ifndef WIBBLE_SFINAE_H
4 #define WIBBLE_SFINAE_H
15 static const bool value =
false;
19 template<
typename A,
typename B >
21 static const bool value =
false;
24 template<
typename A >
29 template<
bool,
bool,
bool = true,
bool = true,
bool = true >
31 static const bool value =
false;
35 struct TAndC< true, true, true, true, true > {
39 template<
typename A,
typename B,
41 struct TAnd :
TAndC< A::value, B::value, C::value, D::value, E::value > {};
43 template<
bool,
bool,
bool = false,
bool = false,
bool = false >
49 struct TOrC< false, false, false, false, false > {
50 static const bool value =
false;
53 template<
typename A,
typename B,
55 struct TOr :
TOrC< A::value, B::value, C::value, D::value, E::value > {};
62 template<
bool a >
struct TNotC {
66 template<
typename T >
struct TNot :
TNotC< T::value > {};
68 template<
bool a,
bool b >
71 template<
typename A,
typename B >
74 template<
bool,
typename T = Unit >
77 template<
typename Type >
80 template<
typename X,
typename T = Unit >
83 template<
typename A,
typename B >