Почему gcc не выдает предупреждение о неопределенном поведении внутри кода?

Я только что прочитал этот часто задаваемый вопрос SO C ++ о неопределенном поведении и точках последовательности и экспериментировал немного. В следующем коде gcc-4.5.2 выдает предупреждение только в строке, упомянутой в комментарии к коду, хотя одна строка перед этим также показывает неопределенное поведение, не так ли? Вы не можете сказать, какой операнд сложения выполняется первым (поскольку + не является точкой последовательности). Почему gcc не выводит мне предупреждение и в этой строке?

int i=0;
int j=0;

int foo(void) {
    i=1;
    return i;
}

int main(void) {
    i = i + foo(); 
    j = j + (j=1); //Here is a rightly warning
    return 0;
}

Спасибо за помощь.

7
задан Community 23 May 2017 в 12:31
поделиться