35 #ifndef _BLAZE_MATH_CONSTRAINTS_VECVECMULTEXPR_H_
36 #define _BLAZE_MATH_CONSTRAINTS_VECVECMULTEXPR_H_
74 template<
bool >
struct CONSTRAINT_MUST_BE_VECVECMULTEXPR_TYPE_FAILED;
75 template<>
struct CONSTRAINT_MUST_BE_VECVECMULTEXPR_TYPE_FAILED<true> {
enum { value = 1 }; };
87 #define BLAZE_CONSTRAINT_MUST_BE_VECVECMULTEXPR_TYPE(T) \
89 blaze::CONSTRAINT_TEST< \
90 blaze::CONSTRAINT_MUST_BE_VECVECMULTEXPR_TYPE_FAILED< blaze::IsVecVecMultExpr<T>::value >::value > \
91 BLAZE_JOIN( CONSTRAINT_MUST_BE_VECVECMULTEXPR_TYPE_TYPEDEF, __LINE__ )
113 template<
bool >
struct CONSTRAINT_MUST_NOT_BE_VECVECMULTEXPR_TYPE_FAILED;
114 template<>
struct CONSTRAINT_MUST_NOT_BE_VECVECMULTEXPR_TYPE_FAILED<true> {
enum { value = 1 }; };
126 #define BLAZE_CONSTRAINT_MUST_NOT_BE_VECVECMULTEXPR_TYPE(T) \
128 blaze::CONSTRAINT_TEST< \
129 blaze::CONSTRAINT_MUST_NOT_BE_VECVECMULTEXPR_TYPE_FAILED< !blaze::IsVecVecMultExpr<T>::value >::value > \
130 BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_VECVECMULTEXPR_TYPE_TYPEDEF, __LINE__ )
152 template<
bool >
struct CONSTRAINT_MUST_FORM_VALID_VECVECMULTEXPR_FAILED;
153 template<>
struct CONSTRAINT_MUST_FORM_VALID_VECVECMULTEXPR_FAILED<true> {
enum { value = 1 }; };
165 #define BLAZE_CONSTRAINT_MUST_FORM_VALID_VECVECMULTEXPR(T1,T2) \
167 blaze::CONSTRAINT_TEST< \
168 blaze::CONSTRAINT_MUST_FORM_VALID_VECVECMULTEXPR_FAILED< ( \
169 blaze::And< blaze::Or< blaze::And< blaze::IsRowVector<T1> \
170 , blaze::IsRowVector<T2> > \
171 , blaze::And< blaze::IsColumnVector<T1> \
172 , blaze::IsColumnVector<T2> > > \
173 , blaze::Or< blaze::Equal< blaze::Size<T1>, blaze::SizeT<0UL> > \
174 , blaze::Equal< blaze::Size<T2>, blaze::SizeT<0UL> > \
175 , blaze::Equal< blaze::Size<T1>, blaze::Size<T2> > > \
176 >::value ) >::value > \
177 BLAZE_JOIN( CONSTRAINT_MUST_FORM_VALID_VECVECMULTEXPR_TYPEDEF, __LINE__ )
199 template<
bool >
struct CONSTRAINT_MUST_NOT_FORM_VALID_VECVECMULTEXPR_FAILED;
200 template<>
struct CONSTRAINT_MUST_NOT_FORM_VALID_VECVECMULTEXPR_FAILED<true> {
enum { value = 1 }; };
212 #define BLAZE_CONSTRAINT_MUST_NOT_FORM_VALID_VECVECMULTEXPR(T1,T2) \
214 blaze::CONSTRAINT_TEST< \
215 blaze::CONSTRAINT_MUST_NOT_FORM_VALID_VECVECMULTEXPR_FAILED< ( \
216 blaze::Not< blaze::And< blaze::Or< blaze::And< blaze::IsRowVector<T1> \
217 , blaze::IsRowVector<T2> > \
218 , blaze::And< blaze::IsColumnVector<T1> \
219 , blaze::IsColumnVector<T2> > > \
220 , blaze::Or< blaze::Equal< blaze::Size<T1>, blaze::SizeT<0UL> > \
221 , blaze::Equal< blaze::Size<T2>, blaze::SizeT<0UL> > \
222 , blaze::Equal< blaze::Size<T1>, blaze::Size<T2> > > > \
223 >::value ) >::value > \
224 BLAZE_JOIN( CONSTRAINT_MUST_NOT_FORM_VALID_VECVECMULTEXPR_TYPEDEF, __LINE__ )
Header file for the IsVecVecMultExpr type trait class.
Header file for the IsRowVector type trait.
Header file for the And class template.
Header file for the SizeT class template.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the Or class template.
Header file for the Not class template.
Constraint wrapper class.
Header file for the IsColumnVector type trait.
Header file for the Size type trait.
Header file for compile time constraints.
Header file for the Equal class template.