C++26: тривиальные бесконечные циклы больше не UB

C++26: Trivial infinite loops are no longer undefined behaviour

В C++11 бесконечный цикл без побочных эффектов, например while (true);, считался неопределённым поведением. Clang мог просто удалить его, и программа продолжала выполнение со следующей функции, что в embedded-системах приводило к реальным уязвимостям. C++26 на основе P2809R3 делает такие тривиальные циклы хорошо определёнными: их тело заменяется вызовом std::this_thread::yield(). Это исправление также принято как defect report и может применяться к более ранним стандартам.

В Clang это печатает «Hello world!». Компилятор удаляет бесконечный цикл, main завершается, и размещённая линкером функция unreachable() выполняется.

Ещё за этот день

2026-09-18