fix a few remaining warnings
and fix commainitializer unit test with MSVC
diff --git a/Eigen/src/Sparse/RandomSetter.h b/Eigen/src/Sparse/RandomSetter.h
index 88e2fe6..d908e31 100644
--- a/Eigen/src/Sparse/RandomSetter.h
+++ b/Eigen/src/Sparse/RandomSetter.h
@@ -40,22 +40,34 @@
   static void setInvalidKey(Type&, const KeyType&) {}
 };
 
-#ifdef _HASH_MAP
-/** Represents a __gnu_cxx::hash_map
+#ifdef EIGEN_UNORDERED_MAP_SUPPORT
+/** Represents a std::unordered_map
+  *
+  * To use it you need to both define EIGEN_UNORDERED_MAP_SUPPORT and include the unordered_map header file
+  * yourself making sure that unordered_map is defined in the std namespace.
+  * 
+  * For instance, with current version of gcc you can either enable C++0x standard (-std=c++0x) or do:
+  * \code
+  * #include <tr1/unordered_map>
+  * #define EIGEN_UNORDERED_MAP_SUPPORT
+  * namespace std {
+  *   using std::tr1::unordered_map;
+  * }
+  * \endcode
   *
   * \see RandomSetter
   */
-template<typename Scalar> struct GnuHashMapTraits
+template<typename Scalar> struct StdUnorderedMapTraits
 {
   typedef int KeyType;
-  typedef __gnu_cxx::hash_map<KeyType,Scalar> Type;
+  typedef std::unordered_map<KeyType,Scalar> Type;
   enum {
     IsSorted = 0
   };
 
   static void setInvalidKey(Type&, const KeyType&) {}
 };
-#endif
+#endif // EIGEN_UNORDERED_MAP_SUPPORT
 
 #ifdef _DENSE_HASH_MAP_H_
 /** Represents a google::dense_hash_map
diff --git a/test/commainitializer.cpp b/test/commainitializer.cpp
index a93a57d..503dd9b 100644
--- a/test/commainitializer.cpp
+++ b/test/commainitializer.cpp
@@ -30,7 +30,10 @@
   Matrix4d m4;
 
   VERIFY_RAISES_ASSERT( (m3 << 1, 2, 3, 4, 5, 6, 7, 8) );
+  
+  #ifndef _MSC_VER
   VERIFY_RAISES_ASSERT( (m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) );
+  #endif
 
   double data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
   Matrix3d ref = Map<Matrix<double,3,3,RowMajor> >(data);
diff --git a/test/sparse.h b/test/sparse.h
index d18217e..128b129 100644
--- a/test/sparse.h
+++ b/test/sparse.h
@@ -24,15 +24,20 @@
 
 #ifndef EIGEN_TESTSPARSE_H
 
-#ifdef __GNUC__
-#include <ext/hash_map>
+#include "main.h"
+
+#if EIGEN_GNUC_AT_LEAST(4,0)
+#include <tr1/unordered_map>
+#define EIGEN_UNORDERED_MAP_SUPPORT
+namespace std {
+  using std::tr1::unordered_map;
+}
 #endif
 
 #ifdef EIGEN_GOOGLEHASH_SUPPORT
   #include <google/sparse_hash_map>
 #endif
 
-#include "main.h"
 #include <Eigen/Cholesky>
 #include <Eigen/LU>
 #include <Eigen/Sparse>
diff --git a/test/sparse_basic.cpp b/test/sparse_basic.cpp
index 68e3573..93065bb 100644
--- a/test/sparse_basic.cpp
+++ b/test/sparse_basic.cpp
@@ -167,8 +167,8 @@
 //   VERIFY_IS_APPROX(m, refMat);
 
     VERIFY(( test_random_setter<RandomSetter<SparseMatrixType, StdMapTraits> >(m,refMat,nonzeroCoords) ));
-    #ifdef _HASH_MAP
-    VERIFY(( test_random_setter<RandomSetter<SparseMatrixType, GnuHashMapTraits> >(m,refMat,nonzeroCoords) ));
+    #ifdef EIGEN_UNORDERED_MAP_SUPPORT
+    VERIFY(( test_random_setter<RandomSetter<SparseMatrixType, StdUnorderedMapTraits> >(m,refMat,nonzeroCoords) ));
     #endif
     #ifdef _DENSE_HASH_MAP_H_
     VERIFY(( test_random_setter<RandomSetter<SparseMatrixType, GoogleDenseHashMapTraits> >(m,refMat,nonzeroCoords) ));
diff --git a/test/submatrices.cpp b/test/submatrices.cpp
index c9552ac..63c61ba 100644
--- a/test/submatrices.cpp
+++ b/test/submatrices.cpp
@@ -57,6 +57,7 @@
      Row.h Column.h Block.h Minor.h DiagonalCoeffs.h
   */
   typedef typename MatrixType::Scalar Scalar;
+  typedef typename MatrixType::RealScalar RealScalar;
   typedef Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> VectorType;
   typedef Matrix<Scalar, 1, MatrixType::ColsAtCompileTime> RowVectorType;
   int rows = m.rows();
@@ -140,11 +141,11 @@
   }
 
   // stress some basic stuffs with block matrices
-  VERIFY(ones.col(c1).sum() == Scalar(rows));
-  VERIFY(ones.row(r1).sum() == Scalar(cols));
+  VERIFY(ei_real(ones.col(c1).sum()) == RealScalar(rows));
+  VERIFY(ei_real(ones.row(r1).sum()) == RealScalar(cols));
 
-  VERIFY(ones.col(c1).dot(ones.col(c2)) == Scalar(rows));
-  VERIFY(ones.row(r1).dot(ones.row(r2)) == Scalar(cols));
+  VERIFY(ei_real(ones.col(c1).dot(ones.col(c2))) == RealScalar(rows));
+  VERIFY(ei_real(ones.row(r1).dot(ones.row(r2))) == RealScalar(cols));
 }
 
 void test_submatrices()