I would personally call that unusual at best.  Logically I would consider it a type mismatch or a syntax error of some kind, since TFoo is a class and TFooClass is a metaclass.  Also, if I saw such code in a project, I would think someone made a mistake that didn't get caught, since TFoo.Create would make much more sense.

I'd wonder if, under OBJFPC mode, such a construct should raise a compiler error because I honestly can't see a situation where it would be correct and intentional over using the associated class in its place.

Kit

On 06/07/2025 13:38, Bart via fpc-devel wrote:
On Sun, Jul 6, 2025 at 1:57 PM Martin Frb via fpc-devel
<fpc-devel@lists.freepascal.org> wrote:


program Project1;
{$mode objfpc}
type TFoo = class end;
       TFooClass = class of TFoo;
var f: TFoo;
      fc: TFooClass;
begin
    fc := TFoo;
    f  := fc.Create;
    f  := TFooClass.Create;  // works
end.
Delphi (7) happily compiles that as well.
And f is of type TFoo there as well.


--
This email has been checked for viruses by Avast antivirus software.
www.avast.com
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to