Fix sparse iterator and tests.
diff --git a/Eigen/src/SparseCore/SparseCompressedBase.h b/Eigen/src/SparseCore/SparseCompressedBase.h
index f5047fd..c1aa426 100644
--- a/Eigen/src/SparseCore/SparseCompressedBase.h
+++ b/Eigen/src/SparseCore/SparseCompressedBase.h
@@ -360,6 +360,7 @@
     
   StorageVal(const StorageIndex& innerIndex, const Scalar& value) : m_innerIndex(innerIndex), m_value(value) {}
   StorageVal(const StorageVal& other) : m_innerIndex(other.m_innerIndex), m_value(other.m_value) {}
+  StorageVal(StorageVal&& other) = default;
 
   inline const StorageIndex& key() const { return m_innerIndex; }
   inline StorageIndex& key() { return m_innerIndex; }
@@ -382,6 +383,9 @@
 {
 public:
   using value_type = StorageVal<Scalar, StorageIndex>;
+  
+  // StorageRef Needs to be move-able for sort on macos.
+  StorageRef(StorageRef&& other) = default;
 
   inline StorageRef& operator=(const StorageRef& other) {
     key() = other.key();
@@ -436,6 +440,7 @@
   CompressedStorageIterator(difference_type index, StorageIndex* innerIndexPtr, Scalar* valuePtr) : m_index(index), m_data(innerIndexPtr, valuePtr) {}
   CompressedStorageIterator(difference_type index, reference data) : m_index(index), m_data(data) {}
   CompressedStorageIterator(const CompressedStorageIterator& other) : m_index(other.m_index), m_data(other.m_data) {}
+  CompressedStorageIterator(CompressedStorageIterator&& other) = default;
   inline CompressedStorageIterator& operator=(const CompressedStorageIterator& other) {
     m_index = other.m_index;
     m_data = other.m_data;
diff --git a/test/sparse_basic.cpp b/test/sparse_basic.cpp
index 0eb1e3b..ddde617 100644
--- a/test/sparse_basic.cpp
+++ b/test/sparse_basic.cpp
@@ -171,8 +171,10 @@
       // generate random inner indices with no repeats
       Vector<Index, Dynamic> innerIndices(inner);
       innerIndices.setLinSpaced(inner, 0, inner - 1);
+      std::random_device rd;
+      std::mt19937 g(rd());
       for (Index j = 0; j < outer; j++) {
-        std::random_shuffle(innerIndices.begin(), innerIndices.end());
+        std::shuffle(innerIndices.begin(), innerIndices.end(), g);
         Index nzj = internal::random<Index>(2, inner / 2);
         for (Index k = 0; k < nzj; k++) {
           Index i = innerIndices[k];
diff --git a/test/sparse_vector.cpp b/test/sparse_vector.cpp
index 88cea09..0f99879 100644
--- a/test/sparse_vector.cpp
+++ b/test/sparse_vector.cpp
@@ -151,7 +151,9 @@
     DenseVector refVec1 = DenseVector::Zero(rows);
     DenseIndexVector innerIndices(rows);
     innerIndices.setLinSpaced(0, rows - 1);
-    std::random_shuffle(innerIndices.begin(), innerIndices.end());
+    std::random_device rd;
+    std::mt19937 g(rd());
+    std::shuffle(innerIndices.begin(), innerIndices.end(), g);
     Index nz = internal::random<Index>(2, rows / 2);
     for (Index k = 0; k < nz; k++)
     {