minor compilation fixes for Sun CC and ICC
diff --git a/Eigen/QR b/Eigen/QR
index 97907d1..5f36d09 100644
--- a/Eigen/QR
+++ b/Eigen/QR
@@ -41,7 +41,7 @@
 
 // declare all classes for a given matrix type
 #define EIGEN_QR_MODULE_INSTANTIATE_TYPE(MATRIXTYPE,PREFIX) \
-  PREFIX template class QR<MATRIXTYPE>; \
+  PREFIX template class HouseholderQR<MATRIXTYPE>; \
   PREFIX template class Tridiagonalization<MATRIXTYPE>; \
   PREFIX template class HessenbergDecomposition<MATRIXTYPE>; \
   PREFIX template class SelfAdjointEigenSolver<MATRIXTYPE>
diff --git a/Eigen/src/Cholesky/LDLT.h b/Eigen/src/Cholesky/LDLT.h
index 9466024..a308b22 100644
--- a/Eigen/src/Cholesky/LDLT.h
+++ b/Eigen/src/Cholesky/LDLT.h
@@ -62,7 +62,7 @@
     typedef Matrix<int, MatrixType::RowsAtCompileTime, 1> IntColVectorType;
     typedef Matrix<int, 1, MatrixType::RowsAtCompileTime> IntRowVectorType;
 
-    /** 
+    /**
     * \brief Default Constructor.
     *
     * The default constructor is useful in cases in which the user intends to
@@ -80,10 +80,10 @@
     }
 
     /** \returns the lower triangular matrix L */
-    inline Part<MatrixType, UnitLowerTriangular> matrixL(void) const 
-    { 
+    inline Part<MatrixType, UnitLowerTriangular> matrixL(void) const
+    {
       ei_assert(m_isInitialized && "LDLT is not initialized.");
-      return m_matrix; 
+      return m_matrix;
     }
 
     /** \returns a vector of integers, whose size is the number of rows of the matrix being decomposed,
@@ -97,24 +97,24 @@
     }
 
     /** \returns the coefficients of the diagonal matrix D */
-    inline Diagonal<MatrixType,0> vectorD(void) const 
-    { 
+    inline Diagonal<MatrixType,0> vectorD(void) const
+    {
       ei_assert(m_isInitialized && "LDLT is not initialized.");
-      return m_matrix.diagonal(); 
+      return m_matrix.diagonal();
     }
 
     /** \returns true if the matrix is positive (semidefinite) */
-    inline bool isPositive(void) const 
-    { 
+    inline bool isPositive(void) const
+    {
       ei_assert(m_isInitialized && "LDLT is not initialized.");
-      return m_sign == 1; 
+      return m_sign == 1;
     }
 
     /** \returns true if the matrix is negative (semidefinite) */
-    inline bool isNegative(void) const 
-    { 
+    inline bool isNegative(void) const
+    {
       ei_assert(m_isInitialized && "LDLT is not initialized.");
-      return m_sign == -1; 
+      return m_sign == -1;
     }
 
     template<typename RhsDerived, typename ResultType>
diff --git a/Eigen/src/Core/MapBase.h b/Eigen/src/Core/MapBase.h
index 59bf69a..0b7d815 100644
--- a/Eigen/src/Core/MapBase.h
+++ b/Eigen/src/Core/MapBase.h
@@ -178,7 +178,14 @@
     }
 
     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); }
 
     template<typename OtherDerived>
     Derived& operator+=(const MatrixBase<OtherDerived>& other)
diff --git a/test/mixingtypes.cpp b/test/mixingtypes.cpp
index ec8a0f1..d14232b 100644
--- a/test/mixingtypes.cpp
+++ b/test/mixingtypes.cpp
@@ -82,7 +82,7 @@
 void test_mixingtypes()
 {
   // check that our operator new is indeed called:
-  CALL_SUBTEST(mixingtypes<3>());
-  CALL_SUBTEST(mixingtypes<4>());
+  CALL_SUBTEST(mixingtypes<3>(3));
+  CALL_SUBTEST(mixingtypes<4>(4));
   CALL_SUBTEST(mixingtypes<Dynamic>(20));
 }