On 04/06/2023 15:04, Juha Manninen via fpc-pascal wrote:
Why the following code fails to compile?

  TMyRec = record
...
property
    RecInstance: TMyRec read fRecInstance;// write fRecInstance;
...
MyObj.RecInstance.ii := 123;
Access through property seems to be the problem. Accessing fRecInstance directly works.


A property enforces that any code you write will work even if you change the property to a getter/setter.
Or in other words, it will fail any code that would not work.

If this was a getter, it would be
  function GetRec: TMyRec;

And that returns a *copy* in a temporary location of the record.
Technically you can modify the members of the temp record (just to have the work thrown away afterwards).

So I guess the compiler forbids it, because the only case it would ever be done is: by mistake.

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

Reply via email to