35 #ifndef _BLAZE_UTIL_CONSTRAINTS_BASEOF_H_
36 #define _BLAZE_UTIL_CONSTRAINTS_BASEOF_H_
66 template<
bool >
struct CONSTRAINT_MUST_BE_BASE_OF_FAILED;
67 template<>
struct CONSTRAINT_MUST_BE_BASE_OF_FAILED<true> {
enum { value = 1 }; };
78 #define BLAZE_CONSTRAINT_MUST_BE_BASE_OF(B,D) \
80 ::blaze::CONSTRAINT_TEST< \
81 ::blaze::CONSTRAINT_MUST_BE_BASE_OF_FAILED< ::blaze::IsBaseOf<B,D>::value >::value > \
82 BLAZE_JOIN( CONSTRAINT_MUST_BE_BASE_OF_TYPEDEF, __LINE__ )
104 template<
bool >
struct CONSTRAINT_MUST_NOT_BE_BASE_OF_FAILED;
105 template<>
struct CONSTRAINT_MUST_NOT_BE_BASE_OF_FAILED<true> {
enum { value = 1 }; };
117 #define BLAZE_CONSTRAINT_MUST_NOT_BE_BASE_OF(B,D) \
119 ::blaze::CONSTRAINT_TEST< \
120 ::blaze::CONSTRAINT_MUST_NOT_BE_BASE_OF_FAILED< !::blaze::IsBaseOf<B,D>::value >::value > \
121 BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_BASE_OF_TYPEDEF, __LINE__ )
143 template<
bool >
struct CONSTRAINT_MUST_BE_STRICTLY_BASE_OF_FAILED;
144 template<>
struct CONSTRAINT_MUST_BE_STRICTLY_BASE_OF_FAILED<true> {
enum { value = 1 }; };
157 #define BLAZE_CONSTRAINT_MUST_BE_STRICTLY_BASE_OF(B,D) \
159 ::blaze::CONSTRAINT_TEST< \
160 ::blaze::CONSTRAINT_MUST_BE_STRICTLY_BASE_OF_FAILED< ::blaze::IsBaseOf<B,D>::value && \
161 !::blaze::IsBaseOf<D,B>::value >::value > \
162 BLAZE_JOIN( CONSTRAINT_MUST_BE_STRICTLY_BASE_OF_TYPEDEF, __LINE__ )
184 template<
bool >
struct CONSTRAINT_MUST_NOT_BE_STRICTLY_BASE_OF_FAILED;
185 template<>
struct CONSTRAINT_MUST_NOT_BE_STRICTLY_BASE_OF_FAILED<true> {
enum { value = 1 }; };
198 #define BLAZE_CONSTRAINT_MUST_NOT_BE_STRICTLY_BASE_OF(B,D) \
200 ::blaze::CONSTRAINT_TEST< \
201 ::blaze::CONSTRAINT_MUST_NOT_BE_STRICTLY_BASE_OF_FAILED< !::blaze::IsBaseOf<B,D>::value || \
202 ::blaze::IsBaseOf<D,B>::value >::value > \
203 BLAZE_JOIN( CONSTRAINT_MUST_NOTBE_STRICTLY_BASE_OF_TYPEDEF, __LINE__ )
Constraint wrapper class.
Header file for the IsBaseOf type trait.
Header file for compile time constraints.