From 0afb1e80c7c3c924231cf8da15bf83213b60855b Mon Sep 17 00:00:00 2001 From: Hauke Heibel Date: Mon, 14 Jun 2010 23:02:49 +0200 Subject: [PATCH] Really fix #123. --- Eigen/src/Core/Assign.h | 18 +++++++++++++++++- Eigen/src/Core/MatrixBase.h | 12 ++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Eigen/src/Core/Assign.h b/Eigen/src/Core/Assign.h index a389b3c06..3a621b19f 100644 --- a/Eigen/src/Core/Assign.h +++ b/Eigen/src/Core/Assign.h @@ -538,9 +538,25 @@ EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const MatrixBase& ot template template -EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const MatrixBase& other) +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const DenseBase& other) { return ei_assign_selector::run(derived(), other.derived()); } +template +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const EigenBase& other) +{ + other.derived().evalTo(derived()); + return derived(); +} + +template +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const ReturnByValue& other) +{ + other.evalTo(derived()); + return derived(); +} + #endif // EIGEN_ASSIGN_H diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h index 7fc5774ad..986806e43 100644 --- a/Eigen/src/Core/MatrixBase.h +++ b/Eigen/src/Core/MatrixBase.h @@ -83,7 +83,6 @@ template class MatrixBase using Base::coeffRef; using Base::lazyAssign; using Base::eval; - using Base::operator=; using Base::operator+=; using Base::operator-=; using Base::operator*=; @@ -153,8 +152,17 @@ template class MatrixBase */ Derived& operator=(const MatrixBase& other); + // We cannot inherit here via Base::operator= since it is causing + // trouble with MSVC. + template - Derived& operator=(const MatrixBase& other); + Derived& operator=(const DenseBase& other); + + template + Derived& operator=(const EigenBase& other); + + template + Derived& operator=(const ReturnByValue& other); #ifndef EIGEN_PARSED_BY_DOXYGEN template