I’ve somewhat forgotten the order things happen when resolving overloads but is
it even possible to make this example work with implicit function
specialization?
Right now it fails and I suspect that’s because the operator overload is not
considered in the correct order (or at all) but is this problem even solvable
or tractable given how the compiler works currently? If you manually specialize
it works but that I would expect since the correct function body is known and
this the operator overload can be selected for the parameter type.
===========================
{$mode objfpc}
{$modeswitch advancedrecords}
{$modeswitch implicitfunctionspecialization}
program test;
type
generic TPtr<T> = record
private type PT = ^T;
private
pointer: PT;
public
class operator :=(right: PT): TPtr;
end;
class operator TPtr.:=(right: PT): TPtr;
begin
result.pointer := right;
end;
generic procedure DoThis<T>(p: specialize TPtr<T>);
begin
end;
var
value: Integer;
begin
DoThis(@value);
end.
Regards,
Ryan Joseph
_______________________________________________
fpc-devel maillist - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel