]> granicus.if.org Git - re2c/commitdiff
Fix for #198. mac_ports
authorUlya Trofimovich <skvadrik@gmail.com>
Wed, 8 Nov 2017 07:19:21 +0000 (07:19 +0000)
committerUlya Trofimovich <skvadrik@gmail.com>
Wed, 8 Nov 2017 07:19:21 +0000 (07:19 +0000)
GCC-4.2.1 is unable to compile code like this:

    std::vector<int> v;
    std::vector<int>::const_reverse_iterator i;
    for (i = v.rbegin(); i != v.rend(); ++i) ;

It's unable to deduce const overload for 'rend':

    "no match for ‘operator!=’ in ‘i != std::vector<_Tp, _Alloc>::rend()"

However, the following code compiles fine:

    std::vector<int> v;
    std::vector<int>::const_reverse_iterator i = v.rbegin(), e = v.rend();
    for (i != e; ++i) ;

This was reported by Ryan Shmidt.

re2c/src/code/bitmap.cc

index b6b0a927dc16cf67e7d2d7ed4da0933e7b5fb2a1..36a9617d1f7bc022cd4ed4f94b1030ed4ff66132 100644 (file)
@@ -27,7 +27,8 @@ bitmaps_t::~bitmaps_t()
 
 void bitmaps_t::insert(const Go *go, const State *s)
 {
-       for (rciter_t i = maps.rbegin(); i != maps.rend(); ++i) {
+       rciter_t i = maps.rbegin(), e = maps.rend();
+       for (; i != e; ++i) {
                if (matches(i->go, i->on, go, s)) return;
        }
 
@@ -37,7 +38,8 @@ void bitmaps_t::insert(const Go *go, const State *s)
 
 const bitmap_t *bitmaps_t::find(const Go *go, const State *s) const
 {
-       for (rciter_t i = maps.rbegin(); i != maps.rend(); ++i) {
+       rciter_t i = maps.rbegin(), e = maps.rend();
+       for (; i != e; ++i) {
                if (i->on == s && matches(i->go, i->on, go, s)) return &(*i);
        }
        return NULL;