aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Christoph Hertzberg <chtz@informatik.uni-bremen.de>2021-04-09 17:03:28 +0000
committerGravatar Rasmus Munk Larsen <rmlarsen@google.com>2021-04-09 17:03:28 +0000
commitd58678069c6c90ac6fe6bdeac5e95fd9ea1a2235 (patch)
tree0cd635171d5757034747d0b667c4d506e311c72b /test
parent2859db0220cd8644c1a75a3bf04f62f551f73f22 (diff)
Make iterators default constructible and assignable, by making...
Diffstat (limited to 'test')
-rw-r--r--test/stl_iterators.cpp30
1 files changed, 29 insertions, 1 deletions
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 <iterator>
#include <numeric>
-#include "main.h"
template< class Iterator >
std::reverse_iterator<Iterator>
@@ -47,6 +47,18 @@ bool is_pointer_based_stl_iterator(const internal::pointer_based_stl_iterator<Xp
template<typename XprType>
bool is_generic_randaccess_stl_iterator(const internal::generic_randaccess_stl_iterator<XprType> &) { return true; }
+template<typename Iter>
+bool is_default_constructible_and_assignable(const Iter& it)
+{
+#if EIGEN_HAS_CXX11
+ VERIFY(std::is_default_constructible<Iter>::value);
+ VERIFY(std::is_nothrow_default_constructible<Iter>::value);
+#endif
+ Iter it2;
+ it2 = it;
+ return (it==it2);
+}
+
template<typename Xpr>
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()) );