diff --git a/src/Benchmarks/SpMV/ReferenceFormats/Legacy/CSR.h b/src/Benchmarks/SpMV/ReferenceFormats/Legacy/CSR.h
index 2156850600d39bf35c44805dc494b0f5455a1a3b..2db4c9f0c78f94670839059f13fc664345985521 100644
--- a/src/Benchmarks/SpMV/ReferenceFormats/Legacy/CSR.h
+++ b/src/Benchmarks/SpMV/ReferenceFormats/Legacy/CSR.h
@@ -262,6 +262,9 @@ public:
    // copy assignment
    CSR& operator=( const CSR& matrix );
 
+   template< CSRKernel KernelType2 >
+   CSR& operator=( const CSR< RealType, DeviceType, IndexType, KernelType2 >& matrix );
+
    // cross-device copy assignment
    template< typename Real2, typename Device2, typename Index2, CSRKernel KernelType2,
              typename = typename Enabler< Device2 >::type >
diff --git a/src/Benchmarks/SpMV/ReferenceFormats/Legacy/CSR_impl.h b/src/Benchmarks/SpMV/ReferenceFormats/Legacy/CSR_impl.h
index 49d78bb9be4767c31eba32aca90c8727319852bd..caded91b9aad8ad9383add015184d708467e3aaa 100644
--- a/src/Benchmarks/SpMV/ReferenceFormats/Legacy/CSR_impl.h
+++ b/src/Benchmarks/SpMV/ReferenceFormats/Legacy/CSR_impl.h
@@ -686,6 +686,23 @@ CSR< Real, Device, Index, KernelType >::operator=( const CSR& matrix )
    return *this;
 }
 
+template< typename Real,
+          typename Device,
+          typename Index,
+          CSRKernel KernelType >
+   template< CSRKernel KernelType2 >
+CSR< Real, Device, Index, KernelType >&
+CSR< Real, Device, Index, KernelType >::
+operator=( const CSR< Real, Device, Index, KernelType2 >& matrix )
+{
+   this->setLike( matrix );
+   this->values = matrix.values;
+   this->columnIndexes = matrix.columnIndexes;
+   this->rowPointers = matrix.rowPointers;
+   this->blocks = matrix.blocks;
+   return *this;
+}
+
 // cross-device copy assignment
 template< typename Real,
           typename Device,