stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Farid Zaripov (JIRA)" <j...@apache.org>
Subject [jira] Commented: (STDCXX-635) std::deque::swap invalidates begin() and end() iterators on empty container
Date Fri, 02 Nov 2007 14:49:50 GMT

    [ https://issues.apache.org/jira/browse/STDCXX-635?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12539602
] 

Farid Zaripov commented on STDCXX-635:
--------------------------------------

Personally, I don't think that this is a bug.

After swap operation the d1.begin() == d1.end() and they are valid end iterators for the d1
(d2.begin() == d2.end() and they are valid end iterators for the d2). The only thing that
was changes is the binary representation of the iterators, so that operator==(d1.begin() before
swap, d2.begin() after swap) returns false.

BTW the Dinkumware STL has the same behavior even on non-empty deque's, because its std::deque::iterator
has member deque*_Mycont, so the before swap d1.begin()._Mycont == &d1; after swap d2.begin()._Mycont
== &d2; and as a result d1.begin() != d2.begin() in any case.


> std::deque::swap invalidates begin() and end() iterators on empty container
> ---------------------------------------------------------------------------
>
>                 Key: STDCXX-635
>                 URL: https://issues.apache.org/jira/browse/STDCXX-635
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 23. Containers
>    Affects Versions: 4.2
>         Environment: All
>            Reporter: Farid Zaripov
>            Priority: Minor
>             Fix For: 4.2.1
>
>
> The program below aborts on assert.
> #include <deque>
> #include <cassert>
> int main ()
> {
>     typedef std::deque<int> Deque;
>     typedef Deque::iterator Iter;
>     Deque d1, d2;
>     Iter iters [2][2] = {
>         { d1.begin (), d1.end () },
>         { d2.begin (), d2.end () }
>     };
>     d1.swap (d2);
>     assert (d2.begin () == iters [0][0]);
>     assert (d2.end ()== iters [0][1]);
>     assert (d1.begin () == iters [1][0]);
>     assert (d1.end ()== iters [1][1]);
>     return 0;
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message