https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91620

            Bug ID: 91620
           Summary: [forward_]list::remove_if should respect to DR 529
           Product: gcc
           Version: 9.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: frankhb1989 at gmail dot com
  Target Milestone: ---

A case for std::list taken from libc++'s testsuite:

#include <cstddef>
#include <cassert>
#include <functional>
#include <list>
using namespace std;

struct PredLWG529
{
        PredLWG529(int i) : i_(i) {};
        ~PredLWG529() { i_ = -32767; }
        bool operator() (const PredLWG529& p) const { return p.i_ == i_; }

        bool operator==(int i) const { return i == i_; }
        int i_;
};

int main()
{
        int a1[] = {1, 2, 1, 3, 5, 8, 11};
        int a2[] = {2, 3, 5, 8, 11};
        std::list<PredLWG529> c(a1, a1 + 7);
        c.remove_if(std::ref(c.front()));
        assert(c.size() == 5);
        for(size_t i = 0; i < c.size(); ++i)
        {
                assert(c.front() == a2[i]);
                c.pop_front();
        }
}

Reply via email to