Ну и тред третий. Короткий. Про UB.
Очень часто приходят в реплаи и советуют перейти на что-нибудь из JVM. Типа там UB нет.
Вообще, оно везде есть. И C++ != UB.
Самый простой пример — любой ffi вызов может быть с UB, если вы нарушили какие-то предусловия
А в C++ его просто много. Его интересно исследовать. Можно даже книжку написать.
Это, конечно, не книжка, но тоже ничего github.com/Nekrolm/ubbook
Мое самое любимое UB — бесконечный цикл без обозреваемых эффектов. Любимое, потому что крайне редко жахает, но все же может.
Мои самые нелюбимое UB — static Initialization/finalization order fiasco и ODR violation.
Потому что черт знает когда бахнет, но обязательно бахнет. И будет больно. И фиг найдешь.