From: Ulya Trofimovich Date: Wed, 8 Nov 2017 07:19:21 +0000 (+0000) Subject: Fix for #198. X-Git-Tag: 1.0.3~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5b95c8ed0a95cf7568377a36d4eed3f59aea2eb6;p=re2c Fix for #198. GCC-4.2.1 is unable to compile code like this: std::vector v; std::vector::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 v; std::vector::const_reverse_iterator i = v.rbegin(), e = v.rend(); for (i != e; ++i) ; This was reported by Ryan Shmidt. --- diff --git a/re2c/src/code/bitmap.cc b/re2c/src/code/bitmap.cc index b6b0a927..36a9617d 100644 --- a/re2c/src/code/bitmap.cc +++ b/re2c/src/code/bitmap.cc @@ -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;