Heim  >  Artikel  >  Backend-Entwicklung  >  Warum sind redundante Vorlagenparameterlisten in C 20-Klassenvorlagenkonstruktoren jetzt ein Fehler?

Warum sind redundante Vorlagenparameterlisten in C 20-Klassenvorlagenkonstruktoren jetzt ein Fehler?

DDD
DDDOriginal
2024-11-19 06:32:02465Durchsuche

Why Are Redundant Template Parameter Lists in C  20 Class Template Constructors Now an Error?

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 Mit dem Template-Parameter in der Konstruktordeklaration wurde dieser Code erfolgreich kompiliert. Allerdings meldet GCC Trunk in C 20 mit aktiviertem Flag -std=c 20 jetzt einen Fehler für diesen Code:

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 Der Vorlagenparameter wird aus der Konstruktordeklaration entfernt.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn