¿Por qué Java, C # y C ++ no tienen rangos?

Ada, Pascal y muchos otros idiomas admiten rangos, una forma de subtipar enteros. Un rango es un valor entero con signo que varía de un valor (primero) a otro (último). Es fácil implementar una clase que haga lo mismo en OOP, pero creo que admitir la característica de forma nativa podría permitir que el compilador realice verificaciones estáticas adicionales.

Sé que es imposible verificar estáticamente que una variable definida en un rango no va a "desbordar" el tiempo de ejecución, es decir, debido a una entrada incorrecta, pero creo que se podría hacer algo. Pienso en elDiseño por contrato enfoque (Eiffel) y la especificación # (Contratos C # ), que dan una solución más general.

¿Existe una solución más simple que verifique, al menos, la asignación estática fuera del límite en tiempo de compilación en C ++, C # y Java? Alguna clase deaserción estática?

editar: Entiendo que los "rangos" se pueden usar para diferentes propósitos:

iteradoresenumeradoressubtipo entero

Me centraría en lo último, porque los formadores son fácilmente mapeables en lenguaje C *. Pienso en un conjunto cerrado de valores, algo así como el volumen de la música, es decir, un rango que va de 1 a 100. Me gustaría aumentarlo o disminuirlo en un valor. Me gustaría tener un error de compilación en caso de desbordamiento estático, algo como:

volume=rangeInt(0,100);
volume=101;  // compile error!
volume=getIntFromInput(); // possible runtime exception

Gracias.

Respuestas a la pregunta(11)

Su respuesta a la pregunta