22 #ifndef _BLAZE_MATH_EXPRESSIONS_TDVECSVECMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_TDVECSVECMULTEXPR_H_
31 #include <boost/type_traits/remove_reference.hpp>
83 inline const typename MultTrait<typename T1::ElementType,typename T2::ElementType>::Type
88 using boost::remove_reference;
90 typedef typename T1::CompositeType Lhs;
91 typedef typename T2::CompositeType Rhs;
92 typedef typename remove_reference<Lhs>::type X1;
93 typedef typename remove_reference<Rhs>::type X2;
94 typedef typename X1::ElementType ET1;
95 typedef typename X2::ElementType ET2;
97 typedef typename X2::ConstIterator ConstIterator;
104 if( (~lhs).size() != (~rhs).size() )
105 throw std::invalid_argument(
"Vector sizes do not match" );
107 if( (~rhs).nonZeros() == 0UL )
return MultType();
112 ConstIterator element( right.begin() );
113 MultType sp( left[ element->index() ] * element->value() );
116 for( ; element!=right.end(); ++element )
117 sp += left[ element->index() ] * element->value();