diff options
author | Gael Guennebaud <g.gael@free.fr> | 2016-06-23 10:25:04 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2016-06-23 10:25:04 +0200 |
commit | a3f7edf7e7672094190e04a0b4417de1abfa3de5 (patch) | |
tree | 39c44282cf1089692d3828828ee97be9dce8c742 | |
parent | a29a2cb4ff4eb153d8e725f126f178371cc0468c (diff) |
Biug 1242: fix comma init with empty matrices.
-rw-r--r-- | Eigen/src/Core/CommaInitializer.h | 7 | ||||
-rw-r--r-- | test/commainitializer.cpp | 23 |
2 files changed, 28 insertions, 2 deletions
diff --git a/Eigen/src/Core/CommaInitializer.h b/Eigen/src/Core/CommaInitializer.h index 2abc6605c..38b1112ff 100644 --- a/Eigen/src/Core/CommaInitializer.h +++ b/Eigen/src/Core/CommaInitializer.h @@ -80,8 +80,11 @@ struct CommaInitializer EIGEN_DEVICE_FUNC CommaInitializer& operator,(const DenseBase<OtherDerived>& other) { - if(other.cols()==0 || other.rows()==0) + if(other.rows()==0) + { + m_col += other.cols(); return *this; + } if (m_col==m_xpr.cols()) { m_row+=m_currentBlockRows; @@ -90,7 +93,7 @@ struct CommaInitializer eigen_assert(m_row+m_currentBlockRows<=m_xpr.rows() && "Too many rows passed to comma initializer (operator<<)"); } - eigen_assert(m_col<m_xpr.cols() + eigen_assert(m_col<m_xpr.cols() || (m_xpr.cols()==0 && m_col==0) && "Too many coefficients passed to comma initializer (operator<<)"); eigen_assert(m_currentBlockRows==other.rows()); if (OtherDerived::SizeAtCompileTime != Dynamic) diff --git a/test/commainitializer.cpp b/test/commainitializer.cpp index 99102b966..86bdb040e 100644 --- a/test/commainitializer.cpp +++ b/test/commainitializer.cpp @@ -43,4 +43,27 @@ void test_commainitializer() 4, 5, 6, vec[2].transpose(); VERIFY_IS_APPROX(m3, ref); + + + // Check with empty matrices (bug #1242) + { + int const M = 0; + int const N1 = 2; + int const N2 = 1; + + { + Matrix<double, M, N1> A1; + Matrix<double, M, N2> A2; + Matrix<double, M, N1 + N2> B; + B << A1, A2; + } + { + Matrix<double, N1, M> A1; + Matrix<double, N2, M> A2; + Matrix<double, N1 + N2, M> B; + B << A1, + A2; + } + } + } |