Restrictions on Overloaded Functions
Several restrictions govern an acceptable set of overloaded functions:
Any two functions in a set of overloaded functions must have different argument lists.
Overloading functions with argument lists of the same types, based on return type alone, is an error.
You can overload operator new solely on the basis of return type — specifically, on the basis of the memory-model modifier specified.
Member functions cannot be overloaded solely on the basis of one being static and the other nonstatic.
typedef declarations do not define new types; they introduce synonyms for existing types. They do not affect the overloading mechanism. Consider the following code:
typedef char * PSTR; void Print( char *szToPrint ); void Print( PSTR szToPrint );
The preceding two functions have identical argument lists. PSTR is a synonym for type char *. In member scope, this code generates an error.
Enumerated types are distinct types and can be used to distinguish between overloaded functions.
The types "array of " and "pointer to" are considered identical for the purposes of distinguishing between overloaded functions. This is true only for singly dimensioned arrays. Therefore, the following overloaded functions conflict and generate an error message:
void Print( char *szToPrint ); void Print( char szToPrint );
For multiply dimensioned arrays, the second and all succeeding dimensions are considered part of the type. Therefore, they are used in distinguishing between overloaded functions:
void Print( char szToPrint ); void Print( char szToPrint ); void Print( char szToPrint );