Полный текст
Компилятор сократил x/x — и оказался «прав». Урок математики, который преподал gccКазалось бы, деление на ноль в С++ обязано ронять программу. Ждём аппаратное исключение и идём искать баг. Но базовые аксиомы иногда дают сбой.Если скомпилировать в gcc вывод выражения x/x при нулевом вводе, краша не случится. Софт тихо вернёт единицу. Причина — константная свёртка. Опираясь на Undefined Behavior, компилятор считает нулевой сценарий невозможным и сокращает переменные по правилам школьной алгебры. При этом MSVC в аналогичной ситуации честно генерирует ошибку.Выясним, как спецификация стандарта ломает математику.