22 #ifndef _BLAZE_UTIL_CONSTRAINTS_DERIVEDFROM_H_
23 #define _BLAZE_UTIL_CONSTRAINTS_DERIVEDFROM_H_
53 template<
bool >
struct CONSTRAINT_MUST_BE_DERIVED_FROM_FAILED;
54 template<>
struct CONSTRAINT_MUST_BE_DERIVED_FROM_FAILED<true> {
enum { value = 1 }; };
65 #define BLAZE_CONSTRAINT_MUST_BE_DERIVED_FROM(D,B) \
67 ::blaze::CONSTRAINT_TEST< \
68 ::blaze::CONSTRAINT_MUST_BE_DERIVED_FROM_FAILED< ::blaze::IsBaseOf<B,D>::value >::value > \
69 BLAZE_JOIN( CONSTRAINT_MUST_BE_DERIVED_FROM_TYPEDEF, __LINE__ )
91 template<
bool >
struct CONSTRAINT_MUST_NOT_BE_DERIVED_FROM_FAILED;
92 template<>
struct CONSTRAINT_MUST_NOT_BE_DERIVED_FROM_FAILED<true> {
enum { value = 1 }; };
104 #define BLAZE_CONSTRAINT_MUST_NOT_BE_DERIVED_FROM(D,B) \
106 ::blaze::CONSTRAINT_TEST< \
107 ::blaze::CONSTRAINT_MUST_NOT_BE_DERIVED_FROM_FAILED< !::blaze::IsBaseOf<B,D>::value >::value > \
108 BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_DERIVED_FROM_TYPEDEF, __LINE__ )
130 template<
bool >
struct CONSTRAINT_MUST_BE_STRICTLY_DERIVED_FROM_FAILED;
131 template<>
struct CONSTRAINT_MUST_BE_STRICTLY_DERIVED_FROM_FAILED<true> {
enum { value = 1 }; };
144 #define BLAZE_CONSTRAINT_MUST_BE_STRICTLY_DERIVED_FROM(D,B) \
146 ::blaze::CONSTRAINT_TEST< \
147 ::blaze::CONSTRAINT_MUST_BE_STRICTLY_DERIVED_FROM_FAILED< ::blaze::IsBaseOf<B,D>::value && \
148 !::blaze::IsBaseOf<D,B>::value >::value > \
149 BLAZE_JOIN( CONSTRAINT_MUST_BE_STRICTLY_DERIVED_FROM_TYPEDEF, __LINE__ )
171 template<
bool >
struct CONSTRAINT_MUST_NOT_BE_STRICTLY_DERIVED_FROM_FAILED;
172 template<>
struct CONSTRAINT_MUST_NOT_BE_STRICTLY_DERIVED_FROM_FAILED<true> {
enum { value = 1 }; };
185 #define BLAZE_CONSTRAINT_MUST_NOT_BE_STRICTLY_DERIVED_FROM(D,B) \
187 ::blaze::CONSTRAINT_TEST< \
188 ::blaze::CONSTRAINT_MUST_NOT_BE_STRICTLY_DERIVED_FROM_FAILED< !::blaze::IsBaseOf<B,D>::value || \
189 ::blaze::IsBaseOf<D,B>::value >::value > \
190 BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_STRICTLY_DERIVED_FROM_TYPEDEF, __LINE__ )