[fpc-pascal] Implicit generic specializations

Sven Barth pascaldragon at googlemail.com
Thu Dec 6 07:37:14 CET 2018


Am 03.12.2018 um 14:01 schrieb Ryan Joseph:
>
>> On Dec 3, 2018, at 2:45 PM, Ryan Joseph <ryan at thealchemistguild.com> wrote:
>>
>> I just looked it over and I was wrong about the dummy, it’s just a flag. If the generic doesn’t cover existing functions then that messes up some assumptions I made so I need re-think the design now.
> I believe I managed to solve the problem and now non-generic procedures take precedence. I guess it’s possible that you could opt out of an implicit specialization now but declaring and overload which the specific type you were interested in. This is probably a good fallback to have so it’s good it’s like this now.
Good. I also confirmed this behavior with Delphi:

=== code begin ===

program GenTest;

type
    TSomeRecord = record
     Value: Integer;
     class procedure Test(aArg: String); overload; static;
     class procedure Test<T>(aArg: T); overload; static;
     class procedure Test(aArg: LongInt); overload; static;
   end;

class procedure TSomeRecord.Test(aArg: String);
begin
   Writeln('String');
end;

class procedure TSomeRecord.Test<T>(aArg: T);
begin
   Writeln('T');
end;

class procedure TSomeRecord.Test(aArg: LongInt);
begin
   Writeln('LongInt');
end;

begin
   TSomeRecord.Test('Hello World');
   TSomeRecord.Test(42);
   TSomeRecord.Test(True);
end.

=== code end ===

This will output:

=== output begin ===

String
LongInt
T

=== output end ===

Regards,
Sven



More information about the fpc-pascal mailing list