aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2010-08-31 09:54:38 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2010-08-31 09:54:38 +0200
commitb49dde01dc70e0c3d4b6b6d67d5050f7a475c87e (patch)
tree35524d217d8b76a39d3d555c88a9c0c48e122dad
parentdd94f104429d417e6f40ac785a113ba872e56010 (diff)
fix bad mat * mat * scalar when the implicit conversion operator to a Matrix is used
-rw-r--r--Eigen/src/Core/ProductBase.h5
-rw-r--r--test/product_extra.cpp4
2 files changed, 7 insertions, 2 deletions
diff --git a/Eigen/src/Core/ProductBase.h b/Eigen/src/Core/ProductBase.h
index b3504f9d0..bc2a0f743 100644
--- a/Eigen/src/Core/ProductBase.h
+++ b/Eigen/src/Core/ProductBase.h
@@ -125,7 +125,7 @@ class ProductBase : public MatrixBase<Derived>
operator const PlainObject& () const
{
m_result.resize(m_lhs.rows(), m_rhs.cols());
- this->evalTo(m_result);
+ derived().evalTo(m_result);
return m_result;
}
@@ -216,6 +216,7 @@ class ScaledProduct
typename NestedProduct::_LhsNested,
typename NestedProduct::_RhsNested> Base;
typedef typename Base::Scalar Scalar;
+ typedef typename Base::PlainObject PlainObject;
// EIGEN_PRODUCT_PUBLIC_INTERFACE(ScaledProduct)
ScaledProduct(const NestedProduct& prod, Scalar x)
@@ -232,7 +233,7 @@ class ScaledProduct
template<typename Dest>
inline void scaleAndAddTo(Dest& dst,Scalar alpha) const { m_prod.derived().scaleAndAddTo(dst,alpha); }
-
+
protected:
const NestedProduct& m_prod;
Scalar m_alpha;
diff --git a/test/product_extra.cpp b/test/product_extra.cpp
index 1ee92c962..de105946e 100644
--- a/test/product_extra.cpp
+++ b/test/product_extra.cpp
@@ -110,6 +110,10 @@ template<typename MatrixType> void product_extra(const MatrixType& m)
VERIFY_IS_APPROX(m1.col(j2).adjoint() * m1.block(0,j,m1.rows(),c), m1.col(j2).adjoint().eval() * m1.block(0,j,m1.rows(),c).eval());
VERIFY_IS_APPROX(m1.block(i,0,r,m1.cols()) * m1.row(i2).adjoint(), m1.block(i,0,r,m1.cols()).eval() * m1.row(i2).adjoint().eval());
+
+ // regression test
+ MatrixType tmp = m1 * m1.adjoint() * s1;
+ VERIFY_IS_APPROX(tmp, m1 * m1.adjoint() * s1);
}
void test_product_extra()