[GiNaC-devel] [PATCH 1/6] G_eval: fix incorrect use of STL iterator.

Alexei Sheplyakov varg at metalica.kh.ua
Sat Aug 8 12:02:47 CEST 2009


According to [lib.bidirectional.iterators] it's not OK to decrement
an iterator pointing to the beginning of the sequence. Fortunately random
access iterators provided by (current versions of) gcc/libstdc++ don't have
this silly limitation, so the code which works with pointers works with
iterators without any changes at all. However,
 - there's no guarantee that the current behavior won't change in the future
 - some non-GNU compilers are not that smart (i.e. the program segfaults
   upon when decrementing beginning-of-the-sequence iterator).
---
 ginac/inifcns_nstdsums.cpp |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/ginac/inifcns_nstdsums.cpp b/ginac/inifcns_nstdsums.cpp
index 2c4061a..b410533 100644
--- a/ginac/inifcns_nstdsums.cpp
+++ b/ginac/inifcns_nstdsums.cpp
@@ -569,11 +569,12 @@ ex G_eval(const Gparameter& a, int scale, const exvector& gsyms)
 
 			Gparameter newa;
 			Gparameter::const_iterator it2 = short_a.begin();
-			for (--it2; it2 != it;) {
-				++it2;
+			for (; it2 != it; ++it2) {
 				newa.push_back(*it2);
 			}
+			newa.push_back(*it);
 			newa.push_back(a[0]);
+			it2 = it;
 			++it2;
 			for (; it2 != short_a.end(); ++it2) {
 				newa.push_back(*it2);	
-- 
1.6.3.3



More information about the GiNaC-devel mailing list