1.2.72 $SCOPEDENUMS Control use of scoped enumeration types

The boolean $SCOPEDENUMS directive controls how enumeration type values are inserted in the symbol tables. The enumeration values are always inserted in a scoped manner.

In its default state (OFF) the enumeration values are additionally inserted directly in the symbol table of the current scope. That means that the following 2 assignments are valid:

{$SCOPEDENUMS OFF}
Type
  TMyEnum = (one,two,three);

Var
  A : TMyEnum;

begin
  A:=one;
  A:=TMyEnum.one;
end.

If the directive is set to ON then the enumeration values are not inserted in the global scope.

This means the assignment must be made as follows:

{$SCOPEDENUMS ON}
Type
  TMyEnum = (one,two,three);

Var
  A : TMyEnum;

begin
  A:=TMyEnum.one;
  // The following will give an error
  // A:=one;
end.

i.e. in the ON state of the directive, the value must always be prefixed with the type name.