I have a problem using const reverse iterators on non-const containers with gcc. Well, only certain versions of gcc.
#include <vector>
#include <iostream>
using namespace std;
int main() {
const char v0[4] = "abc";
vector<char> v(v0, v0 + 3);
vector<char>::const_iterator i;
for (i = v.begin(); i != v.end(); ++i)
cout << *i;
cout << endl;
vector<char>::const_reverse_iterator r;
for (r = v.rbegin(); r != v.rend(); ++r)
cout << *r;
cout << endl;
return 0;
}
This program compiles OK and runs with gcc 4.2.1 (Mac Leopard) and with Visual Studio 8 and 9 (Windows) and gcc 4.1.2 (Linux).
However, there is a compilation error with gcc 3.4.4 (cygwin) and with gcc 4.0.1 (Mac Snow Leopard).
test.cpp:18: error: no match for 'operator!=' in 'r != std::vector<_Tp, _Alloc>::rend() [with _Tp = char, _Alloc = std::allocator<char>]()'
Is this a bug in earlier versions of gcc?
Due to other issues with gcc 4.2.1 on Mac, we need to use gcc 4.0.1 on Mac, so just using the new compiler is not an ideal solution for me. Therefore, I think I need to change how to use reverse iterators. Any suggestions?