On 2010-12-22 14:50, Jonas Maebe wrote:

On 22 Dec 2010, at 14:15, Torsten Bonde Christiansen wrote:

Is it possible to create a constant of a set that is based on an evaluation of other constants? (using fpc 2.4.2)

A basic case could look like this:

type
 TMyType = (a, b, c ,d);
 TMyTypes = set of TMyTypes;

const
 SetX:        TMyTypes = (a, b);
 SetY:        TMyTypes = (c, d);

These definitions should not compile, a set is defined as [a, b], not (a, b).
Sorry - that was my bad, i just made a typo in the previous email. It's written with [] in my code.

SetCombined: TMyTypes = SetX + SetY; // this gives me an "Error: Illegal expression"

I have been reading throught the FPC docs, but it is unclear whether this is possible at all. The set operators allow this and according to FPC doc section on constants some expression evaluation is possible.

So-called "typed constants" are actually initialised variables (for historical reasons). The compiler cannot evaluate expressions that involve variables (initialised or not).

Change the constants into symbol constants if you want to use them in constant expressions:

const
 SetX = [a, b];
 SetY = [c, d];
 SetCombined = SetX + SetY;
Ahh... great. I never thought of the difference between typed constants and symbol constants. Now it works, Thank!

Kind regards,
Torsten Bonde Christiansen.
EpiData Association.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to