From f22ade8ee4705abaa635fa482e97d0b80aa45912 Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Fri, 23 Apr 2010 09:05:46 -0400 Subject: [PATCH] restrict operator[] to vectors, not matrices. --- Eigen/src/Core/Coeffs.h | 4 ++++ Eigen/src/Core/util/StaticAssert.h | 3 ++- test/basicstuff.cpp | 8 ++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Eigen/src/Core/Coeffs.h b/Eigen/src/Core/Coeffs.h index 727dea75e..d27a830dc 100644 --- a/Eigen/src/Core/Coeffs.h +++ b/Eigen/src/Core/Coeffs.h @@ -164,6 +164,8 @@ template EIGEN_STRONG_INLINE const typename DenseBase::CoeffReturnType DenseBase ::operator[](int index) const { + EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime, + THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD) ei_assert(index >= 0 && index < size()); return derived().coeff(index); } @@ -217,6 +219,8 @@ template EIGEN_STRONG_INLINE typename ei_traits::Scalar& DenseBase ::operator[](int index) { + EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime, + THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD) ei_assert(index >= 0 && index < size()); return derived().coeffRef(index); } diff --git a/Eigen/src/Core/util/StaticAssert.h b/Eigen/src/Core/util/StaticAssert.h index b9f31d3e8..31f7d0038 100644 --- a/Eigen/src/Core/util/StaticAssert.h +++ b/Eigen/src/Core/util/StaticAssert.h @@ -83,7 +83,8 @@ THE_MATRIX_OR_EXPRESSION_THAT_YOU_PASSED_DOES_NOT_HAVE_THE_EXPECTED_TYPE, THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_WITH_DIRECT_MEMORY_ACCESS_SUCH_AS_MAP_OR_PLAIN_MATRICES, YOU_ALREADY_SPECIFIED_THIS_STRIDE, - INVALID_STORAGE_ORDER_FOR_THIS_VECTOR_EXPRESSION + INVALID_STORAGE_ORDER_FOR_THIS_VECTOR_EXPRESSION, + THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD }; }; diff --git a/test/basicstuff.cpp b/test/basicstuff.cpp index 70b65a7be..efc08655d 100644 --- a/test/basicstuff.cpp +++ b/test/basicstuff.cpp @@ -22,6 +22,8 @@ // License and a copy of the GNU General Public License along with // Eigen. If not, see . +#define EIGEN_NO_STATIC_ASSERT + #include "main.h" template void basicStuff(const MatrixType& m) @@ -96,6 +98,12 @@ template void basicStuff(const MatrixType& m) VERIFY_RAISES_ASSERT(m1 = (m2.block(0,0, rows-1, cols-1))); } + if(cols!=1 && rows!=1) + { + VERIFY_RAISES_ASSERT(m1[0]); + VERIFY_RAISES_ASSERT((m1+m1)[0]); + } + VERIFY_IS_APPROX(m3 = m1,m1); MatrixType m4; VERIFY_IS_APPROX(m4 = m1,m1);