In C, una variabile const può essere modificata tramite un puntatore?

Ho scritto qualcosa di simile a questo nel mio codice

const int x=1; int *ptr; ptr = &x; *ptr = 2; 

Funziona su tutti i compilatori? Perché il compilatore GCC non nota che stiamo modificando una variabile costante?