#include <debug/list>
#include <iterator>
#include <testsuite_hooks.h>
using __gnu_debug::list;
using std::advance;
bool test = true;
void test03()
{
list<int> v(20, 42);
list<int>::iterator before = v.begin();
list<int>::iterator at = before;
advance(at, 3);
list<int>::iterator after = at;
at = v.erase(at);
VERIFY(before._M_dereferenceable());
VERIFY(at._M_dereferenceable());
VERIFY(after._M_singular());
before = v.begin();
at = before;
after = at;
++after;
at = v.erase(at);
VERIFY(before._M_singular());
VERIFY(at._M_dereferenceable());
VERIFY(after._M_dereferenceable());
before = v.begin();
at = before;
advance(at, 3);
after = at;
advance(after, 3);
v.erase(at, after);
VERIFY(before._M_dereferenceable());
VERIFY(at._M_singular());
before = v.begin();
list<int>::iterator finish = v.end();
VERIFY(before._M_dereferenceable());
v.clear();
VERIFY(before._M_singular());
VERIFY(!finish._M_singular() && !finish._M_dereferenceable());
}
#if !__GXX_WEAK__ && _MT_ALLOCATOR_H
template class __gnu_cxx::__mt_alloc<std::_List_node<int> >;
#endif
int main()
{
test03();
return 0;
}