Schließlich könnte das Problem umgangen werden, indem die entsprechende Funktion Parameter zweier Typen erwartet:
template <class T1, class T2> inline T1 max(T1 a, T2 b) { return a > b ? a : c; }void main() { int x, y = 3, z = 4; double a, b = 1.4, c = 7.3; short m, n = 6, o = 9;
x = max(y, z); // max(int, int) a = max(b, c); // max(double, double) m = max(n, o); // max(short, short) x = max(y, o); // max(int, short) x = max(o, y); // max(short, int) }
Wie man sieht, werden dann wesentlich mehr Funktionen generiert. Für jede mögliche Kombination eine Funktion. Das wesentliche Problem ist aber, daß der Rückgabetyp von der Reihenfolge des Aufrufs abhängt, da immer ein Wert vom ersten Typ zurückgegeben wird.