diff --git a/Eigen/src/Sparse/SparseView.h b/Eigen/src/Sparse/SparseView.h index 3b656d5c8..5a152b255 100644 --- a/Eigen/src/Sparse/SparseView.h +++ b/Eigen/src/Sparse/SparseView.h @@ -31,18 +31,23 @@ struct ei_traits > : ei_traits { typedef int Index; typedef Sparse StorageKind; + enum { + Flags = int(ei_traits::Flags) & (RowMajorBit) + }; }; template class SparseView : public SparseMatrixBase > { typedef typename MatrixType::Nested MatrixTypeNested; + typedef typename ei_cleantype::type _MatrixTypeNested; public: EIGEN_SPARSE_PUBLIC_INTERFACE(SparseView) SparseView(const MatrixType& mat, const Scalar& m_reference = Scalar(0), typename NumTraits::Real m_epsilon = NumTraits::dummy_precision()) : m_matrix(mat), m_reference(m_reference), m_epsilon(m_epsilon) {} + class InnerIterator; inline Index rows() const { return m_matrix.rows(); } @@ -58,10 +63,10 @@ protected: }; template -class SparseView::InnerIterator : public MatrixTypeNested::InnerIterator +class SparseView::InnerIterator : public _MatrixTypeNested::InnerIterator { public: - typedef typename MatrixTypeNested::InnerIterator IterBase; + typedef typename _MatrixTypeNested::InnerIterator IterBase; InnerIterator(const SparseView& view, Index outer) : IterBase(view.m_matrix, outer), m_view(view) { diff --git a/test/sparse_basic.cpp b/test/sparse_basic.cpp index 3ebd59294..8c93909c6 100644 --- a/test/sparse_basic.cpp +++ b/test/sparse_basic.cpp @@ -250,6 +250,13 @@ template void sparse_basic(const SparseMatrixType& re VERIFY(countTrueNonZero==m2.nonZeros()); VERIFY_IS_APPROX(m2, refM2); } + + // test sparseView + { + DenseMatrix refMat2 = DenseMatrix::Zero(rows, rows); + SparseMatrixType m2(rows, rows); + VERIFY_IS_APPROX(m2.eval(), refMat2.sparseView().eval()); + } } void test_sparse_basic()