G_eval: fix incorrect use of STL iterator.
authorAlexei Sheplyakov <varg@metalica.kh.ua>
Sat, 8 Aug 2009 10:02:47 +0000 (13:02 +0300)
committerJens Vollinga <jensv@nikhef.nl>
Sun, 9 Aug 2009 20:08:30 +0000 (22:08 +0200)
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

index 2c4061a..b410533 100644 (file)
@@ -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);