22 #ifndef _BLAZE_UTIL_CONSTRAINTS_BASEOF_H_
23 #define _BLAZE_UTIL_CONSTRAINTS_BASEOF_H_
53 template<
bool >
struct CONSTRAINT_MUST_BE_BASE_OF_FAILED;
54 template<>
struct CONSTRAINT_MUST_BE_BASE_OF_FAILED<true> {
enum { value = 1 }; };
65 #define BLAZE_CONSTRAINT_MUST_BE_BASE_OF(B,D) \
67 ::blaze::CONSTRAINT_TEST< \
68 ::blaze::CONSTRAINT_MUST_BE_BASE_OF_FAILED< ::blaze::IsBaseOf<B,D>::value >::value > \
69 BLAZE_JOIN( CONSTRAINT_MUST_BE_BASE_OF_TYPEDEF, __LINE__ )
91 template<
bool >
struct CONSTRAINT_MUST_NOT_BE_BASE_OF_FAILED;
92 template<>
struct CONSTRAINT_MUST_NOT_BE_BASE_OF_FAILED<true> {
enum { value = 1 }; };
104 #define BLAZE_CONSTRAINT_MUST_NOT_BE_BASE_OF(B,D) \
106 ::blaze::CONSTRAINT_TEST< \
107 ::blaze::CONSTRAINT_MUST_NOT_BE_BASE_OF_FAILED< !::blaze::IsBaseOf<B,D>::value >::value > \
108 BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_BASE_OF_TYPEDEF, __LINE__ )
130 template<
bool >
struct CONSTRAINT_MUST_BE_STRICTLY_BASE_OF_FAILED;
131 template<>
struct CONSTRAINT_MUST_BE_STRICTLY_BASE_OF_FAILED<true> {
enum { value = 1 }; };
144 #define BLAZE_CONSTRAINT_MUST_BE_STRICTLY_BASE_OF(B,D) \
146 ::blaze::CONSTRAINT_TEST< \
147 ::blaze::CONSTRAINT_MUST_BE_STRICTLY_BASE_OF_FAILED< ::blaze::IsBaseOf<B,D>::value && \
148 !::blaze::IsBaseOf<D,B>::value >::value > \
149 BLAZE_JOIN( CONSTRAINT_MUST_BE_STRICTLY_BASE_OF_TYPEDEF, __LINE__ )
171 template<
bool >
struct CONSTRAINT_MUST_NOT_BE_STRICTLY_BASE_OF_FAILED;
172 template<>
struct CONSTRAINT_MUST_NOT_BE_STRICTLY_BASE_OF_FAILED<true> {
enum { value = 1 }; };
185 #define BLAZE_CONSTRAINT_MUST_NOT_BE_STRICTLY_BASE_OF(B,D) \
187 ::blaze::CONSTRAINT_TEST< \
188 ::blaze::CONSTRAINT_MUST_NOT_BE_STRICTLY_BASE_OF_FAILED< !::blaze::IsBaseOf<B,D>::value || \
189 ::blaze::IsBaseOf<D,B>::value >::value > \
190 BLAZE_JOIN( CONSTRAINT_MUST_NOTBE_STRICTLY_BASE_OF_TYPEDEF, __LINE__ )