On 15.04.2018 19:46, Martok wrote:
Am 15.04.2018 um 11:09 schrieb Ondrej Pokorny:
Please note that I want to support all ordinal values on the left side
of the operator. You can then validate a value of variable of the enum
type itself.
Useful indeed! It still strikes me as weird that one will need to add this check
many times when porting code from Delphi, but at least now one can.

Jonas will probably argue that this is a tautology and should always evaluate to
true because a variable of a type by definition is of that type, regardless of
content, but it might be considered as somewhat in line with how "var is class"
handles nil values as "not an instance of class".

Yes, unfortunately the "implementation detail"/"undefined behavior" mantra can strike us here as well :/ Actually it can strike us everywhere. If you take it to an extreme, the Ord(E) result is undefined for an invalid enum value as well:

type
  TMyEnum = (zero, one);
var
  E: TMyEnum;
begin
  E := TMyEnum(5);
  case Ord(E) of
    Ord(zero): A;
    Ord(two): B;
  else
    C;
  end;

Who knows what will be executed. A, B or C or nothing? Undefined behavior indeed...

Ondrej
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to