kray_zemli (kray_zemli) wrote,
kray_zemli
kray_zemli

Category:

std::map iterator UB

Делал тут тестовое задание. Оказывается, --begin() — это UB. А на MSVS всегда --begin() == end(), на что я давно привык полагаться — сколько себя помню, всегда так было.

На GCC, как выяснилось, в одних случаях --begin() == begin(), в других --begin() == end(). Но так как мой код, по несчастливой случайности, в обоих этих случаях отрабатывал корректно, то тестирование на онлайн GCC компиляторе ошибку тоже не выявило. На пустой мапе --begin() вообще крешится на GCC, но у меня такой ситуации не возникало.

Тем не менее, проверяющие докопались к UB и задание не засчитали, хотя работает по факту корректно.

Всё-таки винда лучше Linux, на ней даже std::map реализован адекватнее.
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 12 comments