Mahagam:
фанаты UB подвисают, когда null pointer - это вдруг бывает нормально, и строки вида int *foo = NULL; (*foo)++; - работают
Намного интереснее наблюдать подвисание "фанатов UB" когда компилятор транслирует
for (int i = 0; i >= 0; i++)
...
в бесконечный цикл, несмотря на то, что они "точно знают из ассемблера (и Колян подтвердит)", что при переполнении знаковой переменной ее значение должно стать отрицательным и цикл якобы должен завершиться.
Или когда компилятор в коде
void SomeClass::SomeMethod()
{
if (this != 0)
...
}
рассматривает условие `this != 0` как заведомо истинное и выкидывает проверку из кода вообще ("а ведь в Борланде работало" )
Или как при возвращении ссылки/указателя на локальную переменную
char *foo()
{
char hw[] = "Hello World";
return hw;
}
компилятор нагло подставляет в качество возвращаемого значения нулевой указатель ("а ведь в Борланде работало" ).
Современные компиляторы С и С++ троллят разношерстных "кул-хацкеров" в хвост и в гриву. И введение в GCC поддержки strict-aliasing semantics, и знаменитая история с направлением копирования в `memcpy`, вызвала, помнится, свое время некрасивые истерики аж со стороны примадонны Торвальдса. Но ребята из GCC лишь молча улыбаются в ответ
Вот также и ваше `int *foo = NULL; (*foo)++;` компиляторы скоро либо просто начнут выкидывать из кода, либо будут назло сегфолтить программу даже на тех платформах, на которых это раньше не сегфолтилось . Чтобы не повадно было.
P.S. Какого черта онлайнеровский форум транслирует символы внутри тега code???