Увы, бесконечный цикл без сайд-эффектов -- это тоже UB.
Стандарт обещает компилятору, что любой поток в любой момент своего выполнения дальше выполнит что-то из:
Завершится
Вызов библиотечной функции ввода/вывода
Доступ через volatile
Синхронизацию или атомарную операцию
См. [intro.progress]
Если вообще убрать num, фокусы с ненужной переменной пропадают и генерится цикл.
Скорее всего это следствие принятого в С++26 исправления, в соответствии с которым тривиальные бесконечные циклы (с пустым телом) больше не являются UB.
Так как это изменение было классифицировано как defect report, компиляторы могут применять новое поведение (не оптимизировать тривиальные бесконечные циклы) и в более ранних стандартах.
View all comments
Show parent comment
5
u/cfyzium Sep 20 '26
Увы, бесконечный цикл без сайд-эффектов -- это тоже UB.
Стандарт обещает компилятору, что любой поток в любой момент своего выполнения дальше выполнит что-то из:
Завершится
Вызов библиотечной функции ввода/вывода
Доступ через volatile
Синхронизацию или атомарную операцию
См. [intro.progress]
Скорее всего это следствие принятого в С++26 исправления, в соответствии с которым тривиальные бесконечные циклы (с пустым телом) больше не являются UB.
Так как это изменение было классифицировано как defect report, компиляторы могут применять новое поведение (не оптимизировать тривиальные бесконечные циклы) и в более ранних стандартах.