Por que a troca XOR com números inteiros dispara um aviso?

Digitei o seguinte programa:

#include <stdio.h>

int main(void) {
    int a = 3;
    int b = 42;

    printf("a = %d\nb = %d\n", a, b);

    printf("Exchanging values.\n");
    a ^= b ^= a ^= b;

    printf("a = %d\nb = %d\n", a, b);

    return 0;
}

e está tudo bem. Quando tento compilá-lo, recebo o seguinte:

$ gcc test.c -o test -Wall -Wextra -ansi -pedantic-errors
test.c: In function ‘main’:
test.c:11: warning: operation on ‘a’ may be undefined

Esse é o código padrão, não é?

Por que dispara um aviso? Até onde eu sei, o XOR bit a bit é implementado por padrão paraint desde que você esteja usando uma implementação padrão de C.

Muito obrigado.

questionAnswers(2)

yourAnswerToTheQuestion