From cd62da5ed2cd1036eeac25dab7173e390838b49e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20M=2E=20L=C3=B3pez=20Mu=C3=B1oz?= Date: Wed, 21 Jul 2004 15:19:11 +0000 Subject: [PATCH] extended safe mode to deal with assignments of invalid iterators [SVN r23904] --- .../boost/multi_index/detail/index_iterator.hpp | 2 +- test/test_safe_mode.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/boost/multi_index/detail/index_iterator.hpp b/include/boost/multi_index/detail/index_iterator.hpp index ba232c1..d980331 100644 --- a/include/boost/multi_index/detail/index_iterator.hpp +++ b/include/boost/multi_index/detail/index_iterator.hpp @@ -80,6 +80,7 @@ public: index_iterator& operator=(const index_iterator& x) { + BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(x); safe_super::operator=(x); node=x.node; return *this; @@ -91,7 +92,6 @@ public: index_iterator(Node* node_):node(node_){} #endif - const typename Node::value_type& operator*()const { BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this); diff --git a/test/test_safe_mode.cpp b/test/test_safe_mode.cpp index d7000b5..b5a4ba3 100644 --- a/test/test_safe_mode.cpp +++ b/test/test_safe_mode.cpp @@ -51,6 +51,12 @@ void test_safe_mode() employee_set_as_inserted& i=get(es); es.insert(employee(0,"Joe",31)); + TRY_SAFE_MODE + employee_set::iterator it; + employee_set::iterator it2=es.begin(); + it2=it; + CATCH_SAFE_MODE(safe_mode::invalid_iterator) + TRY_SAFE_MODE employee_set::iterator it; employee e=*it; @@ -131,6 +137,16 @@ void test_safe_mode() employee e=*it; CATCH_SAFE_MODE(safe_mode::invalid_iterator) + TRY_SAFE_MODE + employee_set::iterator it; + { + employee_set es3; + it=es3.insert(employee(0,"Joe",31)).first; + } + employee_set::iterator it2; + it2=it; + CATCH_SAFE_MODE(safe_mode::invalid_iterator) + TRY_SAFE_MODE employee_set es3(es); employee_set es4;