10.4 Function overloading

Function overloading simply means that the same function is dened more than once, but each time with a dierent formal parameter list. The parameter lists must dier at least in one of it's elements type. When the compiler encounters a function call, it will look at the function parameters to decide which one of the dened functions it should call. This can be useful when the same function must be dened for dierent types. For example, in the RTL, the Dec procedure could be dened as:
...  
Dec(Var I : Longint;decrement : Longint);  
Dec(Var I : Longint);  
Dec(Var I : Byte;decrement : Longint);  
Dec(Var I : Byte);  
...

When the compiler encounters a call to the dec function, it will rst search which function it should use. It therefore checks the parameters in a function call, and looks if there is a function denition which matches the specied parameter list. If the compiler nds such a function, a call is inserted to that function. If no such function is found, a compiler error is generated. functions that have a cdecl modier cannot be overloaded. (Technically, because this modier prevents the mangling of the function name by the compiler).

Prior to version 1.9 of the compiler, the overloaded functions needed to be in the same unit. Now the compiler will continue searching in other units if it doesn't nd a matching version of an overloaded function in one unit.

The compiler accepts the presence of the overload modier as in Delphi, but it is not required, unless in Delphi mode.