auto als Non-Type-Templateparameter
Passgenau
Der Platzhalter auto als Non-Type-Templateparameter ist seit C++17 Bestandteil der Sprache. Er bewirkt, dass der Typ des entsprechenden Non-Type-Templateparameters automatisch abgeleitet wird. Dadurch vereinfachen sich Templates.
C++ kennt zwei verschiedene Arten von Templateparametern: Typ und Nichttyp. Ein Nichttypparameter wie der Non-Type-Templateparameter, kurz NTTP, ist immer ein konkreter Wert, meistens eine Zahl, aber auch Adressen, Funktionszeiger oder enum
-Werte sind möglich. Ab C++20 können Entwickler auch float
und eigene Klassen verwenden, solange diese bestimmte Bedingungen erfüllen.
Bei Type-Templateparametern erkennt der Compiler zur Kompilierzeit den Typ, lediglich bei expliziten Spezialisierungen gibt der Entwickler ihn direkt an. Bei Non-Type-Templateparametern ist im Templatekopf immer der Typ angeführt. Entweder ermittelt der Compiler den zugehörigen Wert oder der Entwickler setzt ihn wie bei den expliziten Spezialisierungen. Vor C++17 konnte der Compiler den Typ eines Non-Type-Templateparameters nicht ausfindig machen, das führte zu Duplikationen. Als Beispiel dient der Type Trait std::integral_constant
, der zur Kompilierzeit verfügbare Typen mit einem Wert erstellt. Vor C++17 sah die Verwendung so aus: