Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-devel / 2014-05

Re: overloading function

2 messages · 1 person ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

LacaK

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.

Show quoted text 37 lines
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 - http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply by email

LacaK
to LacaK

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.

Show quoted text 46 lines
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 - > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal >

Reply by email