Juha Nieminen
unread,May 18, 2012, 2:10:56 PM5/18/12You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
I have this piece of (C++11) code:
//----------------------------------------------------------------------
#include <iterator>
template<typename Iter_t>
struct RangeWrapper
{
Iter_t mBegin, mEnd;
RangeWrapper(Iter_t b, Iter_t e): mBegin(b), mEnd(e) {}
Iter_t begin() { return mBegin; }
Iter_t end() { return mEnd; }
};
template<typename Container_t>
RangeWrapper<typename Container_t::reverse_iterator>
revRange(Container_t container)
{
return { container.rbegin(), container.rend() };
}
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v = { 1, 3, 5, 7, 9 };
for(int i: revRange(v)) std::cout << " " << i;
std::cout << "\n";
}
//----------------------------------------------------------------------
For some reason it does not work properly when compiled with gcc 4.6.3.
It prints the first numbers ok, but then it starts printing zeros.
If I compile with -D_GLIBCXX_DEBUG I get a strange runtime error:
/usr/include/c++/4.6/debug/safe_iterator.h:142:error: attempt to copy-
construct an iterator from a singular iterator.
I don't understand what that means.
When run with gdb, the backtrace indicates that the error seems to
happen in RangeWrapper::begin().