> Пруфай.Я тебе даже номера искомых пунктов из "стандарта" си дал.
Пройдись и посмотри что у них implementation-defined behavior и unspecified behavior.
Но я тебе помогу! Держи пару штук! Разумеется не все, их слишком много))
>> All other negative values for FLT_EVAL_METHOD characterize implementation-defined behavior
>> Implementation-defined behavior is the propagation of the high-order bit when a signed integer is shifted right.
>> unspecified behavior is the order in which the arguments to a function are evaluated
> Не "хз как делать", а "разработчики компиляторов лучше знают, как им и их юзерам надо".
Ну-ну. А на выходе всё равно получается хз как))
gcc.gnu.org/bugzilla/show_bug.cgi?id=107238
github.com/llvm/llvm-project/issues/11644
stackoverflow.com/questions/22785705/different-results-between-clang-and-gcc-with-same-code
stackoverflow.com/questions/60973073/implementation-defined-behavior-in-c
и куча других
А потом у тебя "переносимый код" спокойно себе компилируется, но результат получаешь другой))
> как нечто ужасное и недопустимое UB
Ох сколько уязвимойстей было из-за того что в сришечке переполнение signed это UB)))
Но если заглянуть в пункт 4. Conformance, то там как раз написано, что
"A program that is correct in all other aspects, operating on correct data, containing unspecified behavior shall be a correct program"
Т.е. с unspecified behavior программа еще корректная, а вот с undefined - нет.
И компилятор, по хорошему, может просто заменить UB на noop.
Но разрабы компиляторов конечно так не сделали, потому что надо было бы что-то делать с сотнями тысяч строк быдлокода, который уже успели выпрограммировать до принятия стандарта.
На самом деле, если знать историю си и то, как принимался этот "стандарт", то сразу понятно почему так сделали. Но это их не оправдывает.
> Где противоречие, если вся остальная часть, кроме каких-то минорных и не нужных фич
О, так оказывается в Стандарте есть обязательное к исполнению и не обязательные))
Причем сам стандарт это не определяет, это решают имплементирующие его.
> combination of variance and implied bounds for nested references opens a hole in the current type system
Да, штука неприятная, не спорю.
С другой стороны, в си с 89 года signed overflow не исправили))