Merged in jdh8/eigen (pull request PR-71)

Find benchmark opponents more aggressively
diff --git a/Eigen/src/Cholesky/LDLT.h b/Eigen/src/Cholesky/LDLT.h
index ef81030..6881e1c 100644
--- a/Eigen/src/Cholesky/LDLT.h
+++ b/Eigen/src/Cholesky/LDLT.h
@@ -295,7 +295,7 @@
 
       if(k>0)
       {
-        temp.head(k) = mat.diagonal().head(k).asDiagonal() * A10.adjoint();
+        temp.head(k) = mat.diagonal().real().head(k).asDiagonal() * A10.adjoint();
         mat.coeffRef(k,k) -= (A10 * temp.head(k)).value();
         if(rs>0)
           A21.noalias() -= A20 * temp.head(k);
@@ -305,10 +305,10 @@
       // was smaller than the cutoff value. However, soince LDLT is not rank-revealing
       // we should only make sure we do not introduce INF or NaN values.
       // LAPACK also uses 0 as the cutoff value.
-      if((rs>0) && (abs(mat.coeffRef(k,k)) > RealScalar(0)))
-        A21 /= mat.coeffRef(k,k);
-
       RealScalar realAkk = numext::real(mat.coeffRef(k,k));
+      if((rs>0) && (abs(realAkk) > RealScalar(0)))
+        A21 /= realAkk;
+
       if (sign == PositiveSemiDef) {
         if (realAkk < 0) sign = Indefinite;
       } else if (sign == NegativeSemiDef) {
@@ -487,7 +487,7 @@
     EIGEN_USING_STD_MATH(max);
     typedef typename LDLTType::MatrixType MatrixType;
     typedef typename LDLTType::RealScalar RealScalar;
-    const Diagonal<const MatrixType> vectorD = dec().vectorD();
+    const typename Diagonal<const MatrixType>::RealReturnType vectorD(dec().vectorD());
     // In some previous versions, tolerance was set to the max of 1/highest and the maximal diagonal entry * epsilon
     // as motivated by LAPACK's xGELSS:
     // RealScalar tolerance = (max)(vectorD.array().abs().maxCoeff() *NumTraits<RealScalar>::epsilon(),RealScalar(1) / NumTraits<RealScalar>::highest());
@@ -552,7 +552,7 @@
   // L^* P
   res = matrixU() * res;
   // D(L^*P)
-  res = vectorD().asDiagonal() * res;
+  res = vectorD().real().asDiagonal() * res;
   // L(DL^*P)
   res = matrixL() * res;
   // P^T (LDL^*P)
diff --git a/test/cholesky.cpp b/test/cholesky.cpp
index 9aa7da7..1d147bd 100644
--- a/test/cholesky.cpp
+++ b/test/cholesky.cpp
@@ -209,7 +209,7 @@
       VERIFY_IS_APPROX(A * vecX, vecB);
     }
     
-    // check matrices with wide spectrum
+    // check matrices with a wide spectrum
     if(rows>=3)
     {
       RealScalar s = (std::min)(16,std::numeric_limits<RealScalar>::max_exponent10/8);
diff --git a/unsupported/Eigen/src/IterativeSolvers/Scaling.h b/unsupported/Eigen/src/IterativeSolvers/Scaling.h
index 9189fdd..d113e6e 100644
--- a/unsupported/Eigen/src/IterativeSolvers/Scaling.h
+++ b/unsupported/Eigen/src/IterativeSolvers/Scaling.h
@@ -11,7 +11,6 @@
 #define EIGEN_ITERSCALING_H
 
 namespace Eigen {
-using std::abs;
 
 /**
   * \ingroup IterativeSolvers_Module
@@ -73,6 +72,7 @@
      */
     void compute (const MatrixType& mat)
     {
+      using std::abs;
       int m = mat.rows(); 
       int n = mat.cols();
       eigen_assert((m>0 && m == n) && "Please give a non - empty matrix");