On 06/07/2025 16:17, Zoë Peterson via fpc-devel wrote:
I would personally call that unusual at best
What do you two expect this construct to do that you think the current behavior
is wrong? It’sobviously correct and expected to me as a fundamental part of
Object Pascal’s polymorphism. Constructing an object from a class reference is
the entire reason that constructors are virtual. It’s how things like
TPicture.Graphic are implemented to create the correct image loading object.
In the below, calling
fc.Create;
is ok.
fc is a variable, and its value is a class. (that can be TFoo, or TFooChild)
Calling
TFooClass.Create
on the otherhand...
TFooClass is not a class. Its a type for a variable that then as value
can have a class.
And, it also seems to Statically translate into
TFooClass.Create == TFoo.Create.
The type TFooClass itself can not be assigned a value. So it is always
the same.
To answer your question: I expected it to be an error.
But if for cautious reasons that is not going to be, then at least a
warning, nothing less
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.
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel