Прежде всего, ваш синтаксис dynamic_cast неверен (или может быть проблема с форматированием?):
Синтаксис динамической трансляции: dynamic_cast<DerivedClassName*>(BaseClass*)
ИЛИ
dynamic_cast<DerivedClassNameReference>(BaseClassReference)
Этот код выглядит очень подозрительно для меня. Чего ты пытаешься достичь? Почему вы хотите динамически передавать итератор? Это не имеет никакого смысла.
EDIT
begin()
карты имеет две перегрузки, одна из которых возвращает const_iterator, а другая - не const_iterator. В вашем закомментированном коде, поскольку value_type вашей TypeToThreadIterMapStorage
карты является неконстантным итератором, используется вторая версия begin (). Однако тип итератора Data - const_iterator, и компилятор жалуется, что const_iterator нельзя преобразовать в неконстантный итератор. Вам требуется const_cast
для удаления константности объекта, а не dynamic_cast
. Но учтите, что это опасно.
Более простой способ - объявить данные как неконстантный итератор.