21 { return __is_enum(T); }
29 { return !!__is_enum(T); }
36 static const bool trait = __is_enum(T);
40 const bool My2<T>::trait;
42 template<typename T, bool b = __is_enum(T)>
44 { static const bool trait = b; };
46 template<typename T, bool b>
47 const bool My3_help<T, b>::trait;
55 { return My3_help<T>::trait; }
58 #define PTEST(T) (__is_enum(T) && f<T>() \
59 && My<T>().f() && My2<T>::trait && My3<T>().f())
61 #define NTEST(T) (!__is_enum(T) && !f<T>() \
62 && !My<T>().f() && !My2<T>::trait && !My3<T>().f())
67 assert (NTEST (void));