valor da variável const é alterado usando um ponteiro

A saída do programa a seguir é 50 no gcc. Como é possível, pois x é variável constante e * p é x como p é um ponteiro constante apontando para valor em x. Onde o turbo c fornece erro do compilador. É um comportamento 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;
}