[fpc-devel] [fpc-pascal] overloading function StrPLCopy

LacaK lacak at zoznam.sk
Wed May 7 12:41:37 CEST 2014


When I change definition of 3rd parameter in unicode version of 
StrPLCopy from SizeInt to SizeUInt, then in my example program is 
correctly called "ansi version"
So it seems, that this 3rd parameter confused compiler and somehow 
forced him to prefer wrong version...?
-Laco.

> Hi again,
> I reply also to fpc-devel list (excuse me, if it is off-topic), 
> because I would like understand wat is going on.
> I attach also simple test program.
> I use FPC 2.6.4 but I think, that same happens also with fresh 2.7.1
> Thanks
> -Laco.
>
>> On 02.05.2014 07:45, LacaK wrote:
>>> Hi,
>>> 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 parameter 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.
>>
>> Regards,
>> Sven
>>
>> _______________________________________________
>> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
>> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>>
>



More information about the fpc-devel mailing list