Redundante Vorlagenparameterlisten in Klassenvorlagenkonstruktoren in C 20
In C wurde die Syntax zum Deklarieren von Konstruktoren in Klassenvorlagen geändert in C 20. Bisher wurde Code der folgenden Form berücksichtigt wohlgeformt:
template<typename T> struct S { S<T>(); };
Trotz der Redundanz des
error: expected unqualified-id before ')' token 3 | S<T>(); ^
Während dieser Fehler in GCC10.2 oder Clang mit -std= nicht auftritt c 20, es ergibt sich aus einer grundlegenden Änderung, die in C 20 eingeführt wurde.
Laut dem Abschnitt zur C 20-Kompatibilität ist die Verwendung von a simple-template-id als Deklarator-ID für einen Konstruktor oder Destruktor ist nicht mehr gültig. Dieser Schritt zielt darauf ab, potenziell fehleranfällige Redundanz zu beseitigen.
Der neue Wortlaut im Abschnitt [class.ctor] von C 20 legt fest, dass für Konstruktoren in Mitgliedsdeklarationen innerhalb von Klassenvorlagen stattdessen der injizierte Klassenname verwendet werden sollte :
template<typename T> struct S { S(); // Use injected-class-name };
In diesem Beispiel stellt S den injizierten Klassennamen für die innere Klassenvorlage dar. Folglich ist das redundante
Das obige ist der detaillierte Inhalt vonWarum sind redundante Vorlagenparameterlisten in C 20-Klassenvorlagenkonstruktoren jetzt ein Fehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!