¿Por qué el intercambio XOR con enteros activa una advertencia?

Escribí el siguiente 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;
}

y esta bien. Cuando intento compilarlo, obtengo esto:

$ 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

Eso es más o menos el código estándar, ¿no?

¿Por qué provoca una advertencia? Hasta donde sé, XOR bitwise se implementa de forma predeterminada paraint siempre que esté utilizando una implementación estándar de C.

Muchas gracias

Respuestas a la pregunta(2)

Su respuesta a la pregunta