Каково состояние и планы по типу безопасности переписей в D?Тип перечисления безопасности в D
я ожидал
import std.stdio: writeln;
void main(string args[]) {
enum E {x, y, z}
E e;
writeln(e);
e = cast(E)3;
writeln(e);
}
потерпеть неудачу собрать из двойки в противном случае сильного типа проверки статического/диапазона или, по крайней мере, дать RangeException при запуске.
К моему удивлению, вместо этого печатает
cast(E)3
Является ли это действительно предпочтительное поведение по умолчанию для большинства случаев использования? Если это так, кто-нибудь написал какой-то тип-оболочку, обеспечивающий более строгую проверку диапазона, желательно во время компиляции?
перечисления часто также используются в качестве флагов, а 'cast' - это флаг, что некоторые вещи могут не пройти правильно и возвращать нечетные значения –