¿Por qué gcc no permite una constante como una expresión de caso?

Estaba mirando estoQue pregunta Me puse a pensar en constantes contra #defines y me di cuenta de que en realidad no entiendo por qué el compilador no puede lidiar con esto. ¿Podría alguien arrojar algo de luz sobre por qué el siguiente código

const int FOO = 10;

int main(int argc, char** argv)
{
    switch(argc)
    {
        case FOO: { printf("foo\n"); }
        default:  { printf("default\n"); }
    }
}

resultados en

error: case label does not reduce to an integer constant

Leí la especificación ISO-C99 que establece en 6.8.4.2.3 que

La expresión de cada etiqueta de caso será una expresión de constante entera y no habrá dos de las expresiones de constantes de caso en la misma instrucción de conmutación tendrán el mismo valor después de la conversión.

Entiendo por qué la expresión de caso debe ser constante, pero no por qué solo un literal hace feliz al compilador (gcc 4.2.1).

Respuestas a la pregunta(1)

Su respuesta a la pregunta