>> I am trying understand how FPC determines which version of
>>overloaded
>> function to call.
>> Take as example these 2 functions (from SysUtils):
>> 1. function StrPLCopy(Dest: PChar; Source: string; MaxLen:
>>SizeUInt):
>> PChar; overload;
>> 2. function StrPLCopy(Dest: PWideChar; const Source: UnicodeString;
>> MaxLen: SizeInt): PWideChar; overload;
>>
>> And in program I use:
>> var p: pointer;
>> s: string;
>> begin
>> StrPLCopy(p, s, 10);
>> end;
>>
>> It seems, that 2nd "unicode" version of StrPLCopy is called. But
>>why?
>> I am thinking as:
>> 1st parameter is untyped pointer, so no one of function can be
>>prefered
>> 2nd parameter is "string" which exactly match 1st function signature
>> 3rd para meter is "integer constant" which mach both signatures
>>
>> So it seems to me, that 1st version of function signature matches
>> better, because of exact match of 2nd parameter ... why is then
>>called
>> 2nd version?
>
> I don't have a explanation for now, but it *might* be important to
>note whether you are using 2.6.x or 2.7.1.

I observer this with 2.6.4 and also with current 2.7.1
But I guess, that this changed sometime in last year, because in older version of 2.7.1 and 2.6.2 1st version was called.
(I can not confirm it now, because I have on all my PC reinstalled older versions with newer)
-Laco.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to