Стандарт C ++: неожиданный const_iterator в мультимножестве

Я недавно столкнулся с странной проблемой, где яполучилconst_iterator вместо ожидаемогоiterator при переборе мультимножества. Это оказалось не проблема для MSVC, но g ++ дал мне ошибку:

ошибка: неверная инициализация ссылки типа 'myPtr &» из выражения типа 'const boost :: shared_ptr '

Соответствующий код:

typedef std::multiset myList;
myList _mystuff;
void tick(float dt)
{
    for (myList::iterator i = _mystuff.begin(); i != _mystuff.end(); ++i)
    {
        myPtr &mine = *i; // g++ problem here, not for MSVC
        // const myPtr &mine = *i; works fine for g++
        mine->tick(dt);
    }
}

Немного исследований показали, что это проблема многих предыдущих обсуждений. Я нашел эти соответствующие биты:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14990http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#322http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#103http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-closed.html#279http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-closed.html#528

Мои базовые знания и понимание этой проблемы ограничены, и поэтому яХотелось бы узнать, не соответствует ли стандартt определить это поведение достаточно хорошо, и в этом случае g ++ и MSVC реализуют поведение по своему вкусу, или же g ++ или MSVC отклоняются от четко определенного стандарта.

Заранее спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос