Overload

Specifies that a procedure name can be overloaded

Syntax
	KeyPgDeclareDeclare [KeyPgStaticStatic] KeyPgSubSub procedure_name [KeyPgCdeclcdecl|KeyPgStdcallstdcall|KeyPgPascalpascal] Overload [
	KeyPgAliasAlias "external_name"] [([parameter_list])] [KeyPgModuleConstructorConstructor [priority]] [
	KeyPgStaticStatic] [KeyPgExportExport]

	KeyPgDeclareDeclare [KeyPgStaticStatic] KeyPgFunctionFunction procedure_name [KeyPgCdeclcdecl|KeyPgStdcallstdcall|KeyPgPascalpascal] Overload 
	[KeyPgAliasAlias "external_name"] [([parameter_list])] [ KeyPgByrefFunctionByRef ] KeyPgAsAs return_type [
	KeyPgStaticStatic] [KeyPgExportExport]

	[KeyPgPublicPublic|KeyPgPrivatePrivate] KeyPgSubSub procedure_name [KeyPgCdeclcdecl|KeyPgStdcallstdcall|KeyPgPascalpascal] Overload [
	KeyPgAliasAlias "external_name"] [([parameter_list])] [KeyPgModuleConstructorConstructor [priority]] [
	KeyPgStaticStatic] [KeyPgExportExport]
		..procedure body..
	KeyPgEndEnd KeyPgSubSub

	[KeyPgPublicPublic|KeyPgPrivatePrivate] KeyPgFunctionFunction procedure_name [KeyPgCdeclcdecl|KeyPgStdcallstdcall|KeyPgPascalpascal] Overload 
	[KeyPgAliasAlias "external_name"] [([parameter_list])] [ KeyPgByrefFunctionByRef ] KeyPgAsAs return_type  [
	KeyPgStaticStatic] [KeyPgExportExport]
		..procedure body..
	KeyPgEndEnd KeyPgFunctionFunction

Description
	In procedure declarations, Overload allows procedure names to be 
	overloaded, that is, other procedures (regardless of whether to be subs 
	or functions) can then be declared with the same name if their parameter 
	lists are unique. Two parameter lists are unique if they contain a 
	different number of parameters, or have parameters of different types. 
	Note that this means that two or more procedures cannot be declared with 
	the same name if they differ in return type alone.
	A variadic procedure name can never be overloaded.

	Once a procedure name has been declared overloaded, further declarations 
	using the name need not specify Overload, but it is allowed.

	Overload is not necessary in member procedure declarations, as they are 
	always implicitly overloaded.

	When calling an overloaded procedure name, a match score is calculated 
	comparing the call argument types with the parameter types for each 
	candidate procedure (major resolution on datatypes themselves, minor 
	resolution on datatype sizes).
	The highest matching score wins. If this highest score is too low, or if 
	several overloaded procedures have the same highest score, the compiler 
	then generates an error at compile time (no matching procedure, or 
	ambiguous call).

Example
	Declare Function SUM Overload (A As Integer,B As Integer) As Integer
	Declare Function SUM Overload (A As Single,B As Single) As Single
	Function SUM  (A As Integer,B As Integer) As Integer
	   Function=A+B
	End Function   
	Function SUM  (A As Single,B As Single) As Single
	   Function=A+B
	End Function   
	Dim As Integer A,B
	Dim As Single A1,B1
	A=2
	B=3
	A1=2.
	b1=3.
	Print SUM(A,B)
	Print SUM (A1,B1)
	Sleep

Differences from QB
	* New to FreeBASIC

See also
	* KeyPgDeclareDeclare
	* KeyPgSubSub, KeyPgFunctionFunction

