diff options
-rw-r--r-- | Eigen/src/Core/ProductBase.h | 5 | ||||
-rw-r--r-- | test/product_extra.cpp | 4 |
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() |