aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src
diff options
context:
space:
mode:
Diffstat (limited to 'Eigen/src')
-rw-r--r--Eigen/src/Core/MapBase.h22
1 files changed, 12 insertions, 10 deletions
diff --git a/Eigen/src/Core/MapBase.h b/Eigen/src/Core/MapBase.h
index 20103408b..5bdf59fbc 100644
--- a/Eigen/src/Core/MapBase.h
+++ b/Eigen/src/Core/MapBase.h
@@ -173,16 +173,18 @@ template<typename Derived> class MapBase
using Base::operator=;
using Base::operator*=;
- using Base::operator+=;
- using Base::operator-=;
-
-// template<typename Lhs,typename Rhs>
-// Derived& operator+=(const Flagged<Product<Lhs,Rhs,CacheFriendlyProduct>, 0, EvalBeforeNestingBit | EvalBeforeAssigningBit>& other)
-// { return Base::operator+=(other); }
-//
-// template<typename Lhs,typename Rhs>
-// Derived& operator-=(const Flagged<Product<Lhs,Rhs,CacheFriendlyProduct>, 0, EvalBeforeNestingBit | EvalBeforeAssigningBit>& other)
-// { return Base::operator-=(other); }
+
+ // FIXME it seems VS does not allow to do "using Base::operator+="
+ // and to overload operator+= at the same time, therefore we have to
+ // explicitly add these two overloads.
+ // Maye their exists a better solution though.
+ template<typename ProductDerived, typename Lhs,typename Rhs>
+ Derived& operator+=(const Flagged<ProductBase<ProductDerived,Lhs,Rhs>, 0, EvalBeforeNestingBit | EvalBeforeAssigningBit>& other)
+ { return Base::operator+=(other); }
+
+ template<typename ProductDerived, typename Lhs,typename Rhs>
+ Derived& operator-=(const Flagged<ProductBase<ProductDerived,Lhs,Rhs>, 0, EvalBeforeNestingBit | EvalBeforeAssigningBit>& other)
+ { return Base::operator-=(other); }
template<typename OtherDerived>
Derived& operator+=(const MatrixBase<OtherDerived>& other)