ничего не знаю ни о С++ или даже о С, но из любопытства возникли вопросы. может быть кому-то будет не трудно кратко ответить.
1. вот тут говорят что в С++ некое UB. если стандарт не определяет поведение для какого-то случая, то он явно это делает? т.е. там сказано типа «when X then Y must happens, in any other case - UB»? или же UB — это просто всё то, что не покрыто стандартом («а вот об этом там ничего не сказано»)?
2. регламентирует ли стандарт scope UB? или как это сказать, рамки последствий от инструкций, результат которых не определен? к примеру, в программе используется конструкция с UB, в результате чего обнулилась совсем не относящаяся к вопросу память и арифметика стала работать неправильно и т.д. гипотетический компилятор, который такую программу скомпилировал - он формально соответствовал Стандарту С++ ? или же стандарт строго очерчивает область в которой могут наблюдаться произвольный эффект?
3. что сам стандарт говорит о компилиуемости кода с неопределенным поведением? предписывает ли стандарт компилятору (претендующему на полное соответствие стандарту) отвергать код, последствия которого (даже если они имеют строго очерченные рамки) не определены стандартом?
4. возможно ли теоретически построить такой компилятор, который бы допускал инструкции с UB, но гарантировал бы отсутствие вреда от них через пресечение использования их результатов. пример: в точке A вы пишете конструкцию с у которой часть эффекта определена, а часть - UB, и всё работает нормально. но где-то далее вы добавили код (точка B) для определения результата которого необходимо использовать ранее полученный эффект из A (который UB). и вот уже такую компилятор отвергает сразу (либо останавливает ее в рантайме). ведутся ли такие разработки?