23 virtual void rotate(int) = 0;
28 virtual void rotate(int) { }
34 { return __is_abstract(T); }
42 { return !!__is_abstract(T); }
49 static const bool trait = __is_abstract(T);
53 const bool My2<T>::trait;
55 template<typename T, bool b = __is_abstract(T)>
57 { static const bool trait = b; };
59 template<typename T, bool b>
60 const bool My3_help<T, b>::trait;
68 { return My3_help<T>::trait; }
71 #define PTEST(T) (__is_abstract(T) && f<T>() \
72 && My<T>().f() && My2<T>::trait && My3<T>().f())
74 #define NTEST(T) (!__is_abstract(T) && !f<T>() \
75 && !My<T>().f() && !My2<T>::trait && !My3<T>().f())
80 assert (NTEST (void));