From d58678069c6c90ac6fe6bdeac5e95fd9ea1a2235 Mon Sep 17 00:00:00 2001 From: Christoph Hertzberg Date: Fri, 9 Apr 2021 17:03:28 +0000 Subject: Make iterators default constructible and assignable, by making... --- test/stl_iterators.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/stl_iterators.cpp b/test/stl_iterators.cpp index 997f8016c..72bbf8250 100644 --- a/test/stl_iterators.cpp +++ b/test/stl_iterators.cpp @@ -7,9 +7,9 @@ // 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 "main.h" #include #include -#include "main.h" template< class Iterator > std::reverse_iterator @@ -47,6 +47,18 @@ bool is_pointer_based_stl_iterator(const internal::pointer_based_stl_iterator bool is_generic_randaccess_stl_iterator(const internal::generic_randaccess_stl_iterator &) { return true; } +template +bool is_default_constructible_and_assignable(const Iter& it) +{ +#if EIGEN_HAS_CXX11 + VERIFY(std::is_default_constructible::value); + VERIFY(std::is_nothrow_default_constructible::value); +#endif + Iter it2; + it2 = it; + return (it==it2); +} + template void check_begin_end_for_loop(Xpr xpr) { @@ -124,6 +136,22 @@ void test_stl_iterators(int rows=Rows, int cols=Cols) Index i, j; + // Verify that iterators are default constructible (See bug #1900) + { + VERIFY( is_default_constructible_and_assignable(v.begin())); + VERIFY( is_default_constructible_and_assignable(v.end())); + VERIFY( is_default_constructible_and_assignable(cv.begin())); + VERIFY( is_default_constructible_and_assignable(cv.end())); + + VERIFY( is_default_constructible_and_assignable(A.row(0).begin())); + VERIFY( is_default_constructible_and_assignable(A.row(0).end())); + VERIFY( is_default_constructible_and_assignable(cA.row(0).begin())); + VERIFY( is_default_constructible_and_assignable(cA.row(0).end())); + + VERIFY( is_default_constructible_and_assignable(B.row(0).begin())); + VERIFY( is_default_constructible_and_assignable(B.row(0).end())); + } + // Check we got a fast pointer-based iterator when expected { VERIFY( is_pointer_based_stl_iterator(v.begin()) ); -- cgit v1.2.3