Subject: gdb discrepancy in c++ iterators
From: Fred Ma <[email-masked]>
To: [email-masked]
Date: Sat, 29 Mar 2003 03:26:36 -0500
Newsgroups: gnu.gcc.help,comp.unix.programmer

Hello,

I'm having the following problem only on cygwin,
not on solaris 8.  I have a sanity-check program:

     #include<vector>
     #include<iostream>
     using namespace std;
     int main(void)
     {
        vector<int> vi(3);
        vector<int>::iterator it_vi = vi.begin();
        cout << "Hello world.";
     }

I compile it with gcc 3.2 use
gdb2003-03-03-cvs(cygwin-special) to view
vi.begin() and it_vi.  They are different:

     (gdb) p vi.begin()
     $1 = {<iterator<std::random_access_iterator_tag,int,int,int*,int&>> =
                 {<No data fields>}, _M_current = 0xc7e44589}
     (gdb) p it_vi
     $2 = {<iterator<std::random_access_iterator_tag,int,int,int*,int&>> =
                 {<No data fields>}, _M_current = 0xa041de0}

Why are they different?  If I actually dereference the iterators,
they contain the same thing.  But I want to deal with the iterators
themselves.  In particular, I want a conditional breakpoint to trigger
when it_vi==vi.begin()+4.  gdb won't let you add 4 to a random
access iterator, so I have to use the _M_current member data.
Since they are not the same above, I can't do that.  Thanks for
any light on why they differ.

Fred

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/