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() выполняется.