Wie man sieht, wird wegen der Textersetzung der Inkrementoperator mit verdoppelt und damit das Ergebnis verfälscht. Wenn Makros schon in diesem einfachen Beispiel scheitern, taugen sie nichts für unsere Anwendungen.
Eine zweite Anwendungsmöglichkeit ist, daß wir Klassen unabhängig von ihrem Typ definieren wollen. So wäre es sinnvoll einen Stack für beliebige Objekttypen zu haben, ihn aber nur einmal definiern zu müssen. Die Funktionalität wäre aber für alle Typen die gleiche.
Wir kommen somit zu den Anwendungen von Templates: Funktionstemplates und Klassentemplates. Wir wollen aber den Präprozessor nicht ganz verteufeln: Bei komplexen Beispielen mit Templates können wir den Präprozessor sehr gut gebrauchen. Dies übersteigt aber die Anwendungsmöglichkeiten eines durchschnittlichen Programmierers.