Por que Java, C # e C ++ não têm intervalos?

Ada, Pascal e muitos outros idiomas suportam intervalos, uma maneira de subtipos números inteiros. Um intervalo é um valor inteiro assinado que varia de um valor (primeiro) a outro (último). É fácil implementar uma classe que faz o mesmo no OOP, mas acho que o suporte nativo ao recurso pode permitir que o compilador faça verificações estáticas adicionais.

Eu sei que é impossível verificar estaticamente que um variabile definido em um intervalo não vai "exceder" o tempo de execução, ou seja, devido a entrada incorreta, mas acho que algo poderia ser feito. Eu penso noDesign por contrato abordagem (Eiffel) e o Spec # (Contratos em C # ), que fornecem uma solução mais geral.

Existe uma solução mais simples que verifique pelo menos a atribuição estática fora dos limites em tempo de compilação em C ++, C # e Java? Um tipo destatic-assert?

editar: Entendo que "intervalos" podem ser usados para diferentes fins:

iteradoresenumeradoressubtipo inteiro

Eu focaria no último, porque os formadores são facilmente mapeáveis na linguagem C *. Penso em um conjunto fechado de valores, algo como o volume da música, ou seja, um intervalo que varia de 1 a 100. Gostaria de incrementá-lo ou diminuí-lo por um valor. Eu gostaria de ter um erro de compilação em caso de estouro de estática, algo como:

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

Obrigado.

questionAnswers(11)

yourAnswerToTheQuestion