Die offiziellen C++ Core Guidelines warnen in Regel T.47 vor unbeschränkten Templates mit häufig verwendeten Namen. Solche Funktionen können durch die Regeln der C++-Namenssuche in mehr Aufrufkandidaten gelangen als auf den ersten Blick erkennbar ist.
Der Zusammenhang entsteht durch Argument-Dependent Lookup, kurz ADL. Bei einem nicht qualifizierten Funktionsaufruf berücksichtigt der Compiler neben der normalen Suche auch Namensräume, die mit den Typen der Argumente verbunden sind. Das gilt ebenso für überladene Operatoren.
ADL erweitert die Menge möglicher Funktionen
Ein generisches Template mit einem verbreiteten Namen kann dadurch in die Auswahl gelangen, obwohl der Quelltext keine direkte Referenz auf seinen Namensraum enthält. Bei mehreren passenden Überladungen wird die Auflösung schwerer nachvollziehbar. Die Guidelines empfehlen deshalb, solche Templates nicht in einem besonders sichtbaren Namensraum mit allgemeinen Funktionsnamen bereitzustellen.
Die Regel zielt nicht darauf, Templates grundsätzlich zu vermeiden. Sie betrifft ihre Sichtbarkeit und die Wahl der Namen. Eine engere Platzierung, klarere Schnittstellen und passende Einschränkungen machen die Auswahl der Funktionen für Compiler und Entwickler berechenbarer.
Templates bleiben für generische C++-Software wichtig
Die Guidelines führen im selben Themenbereich weitere Regeln zu simulierten Concepts und Type Erasure auf. Für Spiele- und Tool-Teams ist das relevant, weil umfangreiche C++-Codebasen häufig generische Bibliotheken, Engine-Schnittstellen und eigene Utility-Funktionen verbinden. Ein älterer Beitrag zu den C++ Core Guidelines und Concepts behandelte bereits die Verbindung von Traits und Tag Dispatching.

