повысить статус достоверности итератора multi_index после стирания во внутреннем цикле

Это законно? То есть, внешний итератор range0.first становится недействительным при стирании материала с помощью внутреннего итератора range1.first? Спасибо!

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/sequenced_index.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/random_access_index.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/composite_key.hpp>

#include <string>
#include <iostream>

using namespace boost::multi_index;
using namespace std;

struct person {
    string name;
    string last_name;
    int age;
};

typedef multi_index_container<
person,
    indexed_by<
    ordered_non_unique<member<person, string, &person::name> >,
    ordered_non_unique<member<person, int, &person::age> >,
    sequenced<>
    >
    > PersonCollection;


int main()
{
    PersonCollection pc;
    //insert some elements into pc
    struct person kk = {"John", "Doe", 15};
    pc.insert(kk);
    kk = {"John", "Doe2", 17};
    pc.insert(kk);
    kk = {"John", "Doe3", 34};
    pc.insert(kk);
    kk = {"John", "Smith", 15};
    pc.insert(kk);

    auto &index0 = pc.get<0>();
    auto range0 = index0.equal_range("John");
    while (range0.first != range0.second) {
        auto &index1 = pc.get<1>();
        auto range1 = index1.equal_range(range0.first->age);
        while (range1.first != range1.second) {
            if (range1.first->last_name == "Smith")
                range1.first = index1.erase(range1.first);
            else
                ++range1.first;    
        }
        ++range0.first;
    }
    return 0;
}

person hovnatan    schedule 21.11.2015    source источник
comment
Чего вы пытаетесь достичь. Почему вы хотите удалить всех людей по имени Смит того же возраста, что и любой, чье имя оказывается Джоном?   -  person sehe    schedule 21.11.2015
comment
:) ну, это не та проблема, с которой я сейчас сталкиваюсь, но очень похожая   -  person hovnatan    schedule 21.11.2015
comment
И нет, это не законно. Даже если вы устроите внешнее приращение до любого стирания, внешний итератор может стать недействительным, как только появится более одного человека по имени Джон.   -  person sehe    schedule 21.11.2015