diff options
author | Benoit Jacob <jacob.benoit.1@gmail.com> | 2010-04-23 09:05:46 -0400 |
---|---|---|
committer | Benoit Jacob <jacob.benoit.1@gmail.com> | 2010-04-23 09:05:46 -0400 |
commit | f22ade8ee4705abaa635fa482e97d0b80aa45912 (patch) | |
tree | 779e970a435a5df3f6494e0121837b7fe97cc042 | |
parent | 28dde19e40a3d758faa94f0fc228857f7b3192ea (diff) |
restrict operator[] to vectors, not matrices.
-rw-r--r-- | Eigen/src/Core/Coeffs.h | 4 | ||||
-rw-r--r-- | Eigen/src/Core/util/StaticAssert.h | 3 | ||||
-rw-r--r-- | test/basicstuff.cpp | 8 |
3 files changed, 14 insertions, 1 deletions
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<typename Derived> EIGEN_STRONG_INLINE const typename DenseBase<Derived>::CoeffReturnType DenseBase<Derived> ::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<typename Derived> EIGEN_STRONG_INLINE typename ei_traits<Derived>::Scalar& DenseBase<Derived> ::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 <http://www.gnu.org/licenses/>. +#define EIGEN_NO_STATIC_ASSERT + #include "main.h" template<typename MatrixType> void basicStuff(const MatrixType& m) @@ -96,6 +98,12 @@ template<typename MatrixType> 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); |