LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

Что с ним не так? Переполнение не является UB, если что, компилятор не начнёт выдавать безумные оптимизации, если увидит что-то вроде if (a+1 < a)

Возможно я не очень понял, о чём ты пишешь, но он буквально это и делает: https://godbolt.org/z/zYrer5oY7 т.е. он просто выкидывает тело условного оператора. Если заменить int a на unsigned a то условие остаётся.

Иными словами компилятор считает, что условие a + 1 < a никогда не является истинным, если переменная a является знаковым целым числом. Хотя, конечно же, на практике это может случиться.

Исходная версия vbr, :

Что с ним не так? Переполнение не является UB, если что, компилятор не начнёт выдавать безумные оптимизации, если увидит что-то вроде if (a+1 < a)

Возможно я не очень понял, о чём ты пишешь, но он буквально это и делает: https://godbolt.org/z/zYrer5oY7 т.е. он просто выкидывает тело условного оператора. Если заменить int a на unsigned a то условие остаётся.