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

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

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

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

typedef std::multiset<myPtr> 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

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

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

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

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