From 8af045a28721a9401d423c0318ffb99696c78f31 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Thu, 14 Nov 2019 11:45:52 +0100 Subject: bug #1774: fix VectorwiseOp::begin()/end() return types regarding constness. --- Eigen/src/Core/VectorwiseOp.h | 10 +++++++--- test/stl_iterators.cpp | 13 ++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Eigen/src/Core/VectorwiseOp.h b/Eigen/src/Core/VectorwiseOp.h index db0b9f8c4..274501c61 100644 --- a/Eigen/src/Core/VectorwiseOp.h +++ b/Eigen/src/Core/VectorwiseOp.h @@ -1,7 +1,7 @@ // This file is part of Eigen, a lightweight C++ template library // for linear algebra. // -// Copyright (C) 2008-2010 Gael Guennebaud +// Copyright (C) 2008-2019 Gael Guennebaud // Copyright (C) 2006-2008 Benoit Jacob // // This Source Code Form is subject to the terms of the Mozilla @@ -286,14 +286,18 @@ template class VectorwiseOp /** returns an iterator to the first row (rowwise) or column (colwise) of the nested expression. * \sa end(), cbegin() */ - iterator begin() const { return iterator (m_matrix, 0); } + iterator begin() { return iterator (m_matrix, 0); } + /** const version of begin() */ + const_iterator begin() const { return const_iterator(m_matrix, 0); } /** const version of begin() */ const_iterator cbegin() const { return const_iterator(m_matrix, 0); } /** returns an iterator to the row (resp. column) following the last row (resp. column) of the nested expression * \sa begin(), cend() */ - iterator end() const { return iterator (m_matrix, m_matrix.template subVectors()); } + iterator end() { return iterator (m_matrix, m_matrix.template subVectors()); } + /** const version of end() */ + const_iterator end() const { return const_iterator(m_matrix, m_matrix.template subVectors()); } /** const version of end() */ const_iterator cend() const { return const_iterator(m_matrix, m_matrix.template subVectors()); } diff --git a/test/stl_iterators.cpp b/test/stl_iterators.cpp index 5fef34c0d..cdd9e5c33 100644 --- a/test/stl_iterators.cpp +++ b/test/stl_iterators.cpp @@ -1,12 +1,13 @@ // This file is part of Eigen, a lightweight C++ template library // for linear algebra. // -// Copyright (C) 2018 Gael Guennebaud +// Copyright (C) 2018-2019 Gael Guennebaud // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. +#include #include #include "main.h" @@ -422,6 +423,16 @@ void test_stl_iterators(int rows=Rows, int cols=Cols) VERIFY_IS_EQUAL( std::find_if(A.colwise().begin(), A.colwise().end(), [](typename ColMatrixType::ColXpr x) { return x.norm() == Scalar(0); })-A.colwise().begin(), j ); } + { + using VecOp = VectorwiseOp; + STATIC_CHECK(( internal::is_same().cbegin())>::value )); + STATIC_CHECK(( internal::is_same().cend ())>::value )); + #if EIGEN_COMP_CXXVER>=14 + STATIC_CHECK(( internal::is_same()))>::value )); + STATIC_CHECK(( internal::is_same()))>::value )); + #endif + } + #endif } -- cgit v1.2.3