All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BaseOf.h
Go to the documentation of this file.
1 //=================================================================================================
20 //=================================================================================================
21 
22 #ifndef _BLAZE_UTIL_CONSTRAINTS_BASEOF_H_
23 #define _BLAZE_UTIL_CONSTRAINTS_BASEOF_H_
24 
25 
26 //*************************************************************************************************
27 // Includes
28 //*************************************************************************************************
29 
31 #include <blaze/util/Suffix.h>
33 
34 
35 namespace blaze {
36 
37 //=================================================================================================
38 //
39 // MUST_BE_BASE_OF CONSTRAINT
40 //
41 //=================================================================================================
42 
43 //*************************************************************************************************
53 template< bool > struct CONSTRAINT_MUST_BE_BASE_OF_FAILED;
54 template<> struct CONSTRAINT_MUST_BE_BASE_OF_FAILED<true> { enum { value = 1 }; };
56 //*************************************************************************************************
57 
58 
59 //*************************************************************************************************
65 #define BLAZE_CONSTRAINT_MUST_BE_BASE_OF(B,D) \
66  typedef \
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__ )
70 //*************************************************************************************************
71 
72 
73 
74 
75 //=================================================================================================
76 //
77 // MUST_NOT_BE_BASE_OF CONSTRAINT
78 //
79 //=================================================================================================
80 
81 //*************************************************************************************************
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 }; };
94 //*************************************************************************************************
95 
96 
97 //*************************************************************************************************
104 #define BLAZE_CONSTRAINT_MUST_NOT_BE_BASE_OF(B,D) \
105  typedef \
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__ )
109 //*************************************************************************************************
110 
111 
112 
113 
114 //=================================================================================================
115 //
116 // MUST_BE_STRICTLY_BASE_OF CONSTRAINT
117 //
118 //=================================================================================================
119 
120 //*************************************************************************************************
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 }; };
133 //*************************************************************************************************
134 
135 
136 //*************************************************************************************************
144 #define BLAZE_CONSTRAINT_MUST_BE_STRICTLY_BASE_OF(B,D) \
145  typedef \
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__ )
150 //*************************************************************************************************
151 
152 
153 
154 
155 //=================================================================================================
156 //
157 // MUST_NOT_BE_STRICTLY_BASE_OF CONSTRAINT
158 //
159 //=================================================================================================
160 
161 //*************************************************************************************************
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 }; };
174 //*************************************************************************************************
175 
176 
177 //*************************************************************************************************
185 #define BLAZE_CONSTRAINT_MUST_NOT_BE_STRICTLY_BASE_OF(B,D) \
186  typedef \
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__ )
191 //*************************************************************************************************
192 
193 } // namespace blaze
194 
195 #endif