On Fri, 19 Jun 2015, Torsten Bonde Christiansen wrote:

Consider the following program:

program Project1;

type
  TMyEnum = (
    a = 1,
    b = 3,
    c = 5
  );
  TMySet = set of TMyEnum;
var
  Item: TMyEnum;

begin
  for Item in TMySet do
    Writeln('Value = ', Integer(Item));
end.
        

I would expect the output of the program to contain the values 1, 3 and 5 only. 
But the actual output is:
Value = 1
Value = 2
Value = 3
Value = 4
Value = 5

Is this a bug or a know limitation of the "for ... In ... do" loop?

This is a known limitation: you cannot use for..in..  with enums that have 
assigned values.

The compiler gives an error if you do:

home: >cat tef.pp
type
  TMyEnum = (a = 1,b = 3,c = 5);
   var
   Item: TMyEnum;
   begin
   for Item in TMyEnum do
   Writeln('Value = ', Integer(Item));
   end.
home: >fpc tef.pp
tef.pp(6,16) Error: For in loop cannot be used for the type "TMyEnum"
tef.pp(8,7) Fatal: There were 1 errors compiling module, stopping

But it is a bug that the compiler does not give an error for the set type. 
Please report it.

If you use a variable as indicated by Peter, it will work.

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

Reply via email to