el valor de la variable const se cambia usando un puntero

La salida del siguiente programa es 50 en gcc. ¿Cómo es posible que x sea una variable constante y * p sea x en sí mismo? P es un puntero constante que apunta al valor en x. Donde como turbo c da error del compilador. ¿Es un comportamiento indefinido? por favor explique.

#include<stdio.h>

int main()
{
    const int x = 25;
    int * const p = &x;
    *p = 2 * x;
    printf("%d", x);
    return 0;
}