std::list::swap does not swap containers with defferent allocator correctly
---------------------------------------------------------------------------

                 Key: STDCXX-334
                 URL: https://issues.apache.org/jira/browse/STDCXX-334
             Project: C++ Standard Library
          Issue Type: Bug
          Components: 23. Containers
    Affects Versions: 4.1.3
         Environment: All
            Reporter: Farid Zaripov


The program below fails:

---------------------------------------------
#include <list>
#include <string>
#include <cassert>

class Alloc : public std::allocator <char>
{
};

bool operator == (Alloc a1, Alloc a2)
{
    return false;
}

bool operator != (Alloc a1, Alloc a2)
{
    return true;
}

int main(int argc, char* argv[])
{
    const char src [] = "source string";
    const char dst [] = "destination string";

    typedef std::list <char, Alloc> List;
    
    Alloc a1;
    Alloc a2;

    assert (!(a1 == a2));

    List src_lst (src, src + sizeof (src) - 1, a1);
    List dst_lst (dst, dst + sizeof (dst) - 1, a2);

    src_lst.swap (dst_lst);

    assert (std::string (src_lst.begin (), src_lst.end ()) == dst);
    assert (std::string (dst_lst.begin (), dst_lst.end ()) == src);

    return 0;
}

---------------------------------------------

Assertion failed: std::string (dst_lst.begin (), dst_lst.end ()) == src, file 
swap.cpp, line 37

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.


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

Reply via email to