On 02.02.2023 10:22, Michael Van Canneyt via fpc-devel wrote:
On Thu, 2 Feb 2023, Ondrej Pokorny via fpc-devel wrote:
On 02.02.2023 10:15, Michael Van Canneyt via fpc-devel wrote:
On Thu, 2 Feb 2023, Ondrej Pokorny via fpc-devel wrote:
I myself cannot think of any real use case of constref other than hacks like the FreeAndNil in recent Delphi versions:

procedure FreeAndNil(const [ref] Obj: TObject);

that needs the ref because it changes it to nil (so is not really a const - it used to be an untyped var). As a result FreeAndNil allows you to happily pass read-only properties to it that are then nilled.

Which is a clear violation of the concept of Const... :/

Exactly.

Probably an ill-advised "fix" to the problem that FreeAndNil accepted an untyped var
and you could basically pass anything.

Yes. Solving one problem by creating a different one. The best would be if the FreeAndNil declaration alternated between constref and untyped var between builds. In that case you would be able to hunt both the issues :)

Seriously, having a [loose] modifier would be much more useful, IMO:

FreeAndNil(var [loose] Obj: TObject);

That would allow you to pass any TObject descendant.

Ondrej

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

Reply via email to