3 #ifndef WIBBLE_SFINAE_H 4 #define WIBBLE_SFINAE_H 14 static const bool value =
true;
18 static const bool value =
false;
22 template<
typename A,
typename B >
24 static const bool value =
false;
27 template<
typename A >
29 static const bool value =
true;
32 template<
bool,
bool,
bool = true,
bool = true,
bool = true >
34 static const bool value =
false;
38 struct TAndC< true, true, true, true, true > {
39 static const bool value =
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 >
48 static const bool value =
true;
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 {
66 static const bool value = !a;
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 >
Type T
Definition: sfinae.h:81
bool operator<(Unit) const
Definition: sfinae.h:9
A First
Definition: sfinae.h:97
B Second
Definition: sfinae.h:98
bool operator==(Unit) const
Definition: sfinae.h:10
NotPreferred(Preferred)
Definition: sfinae.h:102
Type T
Definition: sfinae.h:87