bug #1005: fix regression regarding sparse coeff-wise binary operator that did not trigger a static assertion for mismatched storage

This commit is contained in:
Gael Guennebaud 2015-06-08 10:14:08 +02:00
parent 0a9b5d1396
commit a7ae628c9f
3 changed files with 36 additions and 0 deletions

View File

@ -29,6 +29,24 @@ namespace Eigen {
// 4 - dense op dense product dense
// generic dense
template<typename BinaryOp, typename Lhs, typename Rhs>
class CwiseBinaryOpImpl<BinaryOp, Lhs, Rhs, Sparse>
: public SparseMatrixBase<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
{
public:
typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> Derived;
EIGEN_SPARSE_PUBLIC_INTERFACE(Derived)
CwiseBinaryOpImpl()
{
typedef typename internal::traits<Lhs>::StorageKind LhsStorageKind;
typedef typename internal::traits<Rhs>::StorageKind RhsStorageKind;
EIGEN_STATIC_ASSERT((
(!internal::is_same<LhsStorageKind,RhsStorageKind>::value)
|| ((Lhs::Flags&RowMajorBit) == (Rhs::Flags&RowMajorBit))),
THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH);
}
};
namespace internal {
template<typename BinaryOp, typename Lhs, typename Rhs, typename Derived,

View File

@ -47,6 +47,8 @@ ei_add_failtest("sparse_ref_3")
ei_add_failtest("sparse_ref_4")
ei_add_failtest("sparse_ref_5")
ei_add_failtest("sparse_storage_mismatch")
ei_add_failtest("partialpivlu_int")
ei_add_failtest("fullpivlu_int")
ei_add_failtest("llt_int")

View File

@ -0,0 +1,16 @@
#include "../Eigen/Sparse"
using namespace Eigen;
typedef SparseMatrix<double,ColMajor> Mat1;
#ifdef EIGEN_SHOULD_FAIL_TO_BUILD
typedef SparseMatrix<double,RowMajor> Mat2;
#else
typedef SparseMatrix<double,ColMajor> Mat2;
#endif
int main()
{
Mat1 a(10,10);
Mat2 b(10,10);
a += b;
}