Будьте осторожны с использованием
co_yield с исключениями в функции в релизе.
В 16.2 была очень неприятная ошибка, когда компилятор иногда "забывал" сгенерировать один опкод в коде.
При чём проявляется стабильно только при мультипроцессорной сборке на машине с 8-ю и более ядрами и только если компилятору удавлось заинлайнить.
На билд машине их 64, поэтому там проявлялось без проблем, а собранный локально не повторял ошибку.
В
16.3 пока этой проблемы не замечено.
Здравствуйте, _NN_, Вы писали:
Как оказалось в 16.3 не починили таки.
Флаг /d2CoroOptsWorkaround частично помогает, но как выяснилось через два-три билда компилятор выдаёт неправильный код.
На данный момент обходом этой проблему является выключения оптимизации для кода использующего co_yield.
#ifdef _M_IX86
#pragma optimize ("", off)
#endif
...
#ifdef _M_IX86
#pragma optimize ("", on)
#endif
В 16.4 Preview 2 воспроизвести проблему мне ещё не удалось. Осталось молиться, чтобы не сломали до релиза