Mam dość nietypowe pytanie, odnośnie deklaracji typów wyliczeniowych. Mały przykład, ilustrujący takie pseudo-aliasy:
type
TOptionKind = (okCancel, okFirst, okYes = 1, okSecond, okNo = 2, okThird);
Kompilator bez problemu kompiluje taki kod, dodając do okna wiadomości notkę:
Note: Values in enumeration types have to be ascending
Czyli małym problemem jest to, że typ ten reprezentuje ciąg niemalejący zamiast rosnącego.
Pobranie wartości liczbowych za pomocą funkcji Ord
działa prawidłowo, porównanie par elementów o takich samych liczbowych wartościach również działa prawidłowo. Jedynym minusem jest to, że pętla for in
dla tego typu wykona cztery iteracje – czyli tyle, ile jest unikalych wartości (ale na pętli mi nie zależy), a nie tyle, ile jest faktycznych elementów.
Meritum: Czy używanie takiego typu wyliczeniowego może być w jakiś sposób nieprzewidywalne?
W dokumentacji nie znalazłem informacji na ten temat, ani też żadnych kodów wykorzystujących tak zadeklarowany typ wyliczeniowy. Dlatego też nie wiem czy uznać zdolność kompilacji tego kodu za „false positive” i zastąpić go zestawem stałych, czy spokojnie użyć tej konstrukcji, ignorując pokazywaną notkę.