delphi compiler-errors delphi-2009

El uso de la palabra clave `in` provoca" E1012 La expresión constante viola los límites del subintervalo "en Delphi



compiler-errors delphi-2009 (1)

La documentación sobre Sets dice:

El tipo base no puede tener más de 256 valores posibles, y sus ordinalidades deben estar entre 0 y 255.

Entonces, incluso si puede tener enumeraciones de cualquier valor, la instrucción if xx in [a,b,c] fallará aquí, ya que un conjunto no puede contener un valor mayor que 255.

Use una declaración de caso en su lugar:

case xx of a,b,c : // Make something end;

Me he encontrado con un comportamiento bastante inusual en un poco de código Delphi. Cuando uso la palabra clave in para verificar si un elemento está en una matriz constante, obtengo el siguiente error de compilación:

E1012 La expresión constante viola los límites del subintervalo

Las constantes se definen de la siguiente manera:

type TSomeEnum = (seFoo = 1000, seBar = 2000, seBoo = 3000, seFar = 4000, seFooBar = 5000, seBooFar = 6000, seLow = 1000, seHigh = 6000, seCount = 6);

La línea que está fallando es la siguiente:

if someObj.someProperty in [seFoo, seFar, seFooBar] then ...

Aunque entiendo el razonamiento detrás del error que se muestra en otra pregunta publicada aquí , donde los límites que revisan las matrices de enteros no se hicieron en tiempo de compilación cuando se usa una variable, parece extraño que tenga el mismo problema con una matriz constante que es sin duda dentro de los límites.

Por ahora, he reemplazado la línea con una declaración (mucho más grande) que comprende or cláusulas. Sin embargo, esto claramente no es ideal. ¿Alguien puede arrojar alguna luz sobre por qué estoy recibiendo este problema?