diff --git a/Eigen/src/SparseCore/SparseAssign.h b/Eigen/src/SparseCore/SparseAssign.h index 4b663a59e..cb154d1c2 100644 --- a/Eigen/src/SparseCore/SparseAssign.h +++ b/Eigen/src/SparseCore/SparseAssign.h @@ -136,9 +136,13 @@ struct Assignment template< typename DstXprType, typename SrcXprType, typename Functor> struct Assignment { + typedef typename DstXprType::Scalar Scalar; static void run(DstXprType &dst, const SrcXprType &src, const Functor &func) { eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); + + if(internal::is_same >::value) + dst.setZero(); internal::evaluator srcEval(src); internal::evaluator dstEval(dst); @@ -149,23 +153,6 @@ struct Assignment } }; -template< typename DstXprType, typename SrcXprType> -struct Assignment, Sparse2Dense> -{ - static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op &) - { - eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); - - dst.setZero(); - internal::evaluator srcEval(src); - internal::evaluator dstEval(dst); - const Index outerEvaluationSize = (internal::evaluator::Flags&RowMajorBit) ? src.rows() : src.cols(); - for (Index j=0; j::InnerIterator i(srcEval,j); i; ++i) - dstEval.coeffRef(i.row(),i.col()) = i.value(); - } -}; - // Specialization for "dst = dec.solve(rhs)" // NOTE we need to specialize it for Sparse2Sparse to avoid ambiguous specialization error template