Eine der neuen Funktionen in C ++ 20 ist Down withtypename
.
In C ++ 17, Sie hatten das bieten typename
fast alle Schlüsselwort in † abhängig Kontexten einen Typen von einem Wert eindeutig zu machen. In C ++ 20 ist diese Regel jedoch stark gelockert. In allen Kontexten, in denen Sie einen Typ benötigen , ist dertypename
Schlüsselwort nicht mehr obligatorisch.
Ein solcher Kontext ist der Rückgabetyp einer Funktion im Klassenbereich, wie in Ihrem Beispiel. Andere enthalten den Typ in einer Elementdeklaration, den Typ auf der rechten Seite einer using-Deklaration, die Parameterdeklaration eines Lambda, den Typ, an den Sie übergeben static_cast
usw. Die vollständige Liste finden Sie im Dokument .
† Fast alle, weil Basisspezifizierer und Mem-Initialisierer-IDs immer ausgeschlossen wurden, wie in:
template <typename T> struct X : T::type { };
Das ist in Ordnung, denn das muss ein Typ sein. Das Papier erweitert diese Logik einfach (nun, es muss ein Typ sein, also nehmen wir einfach an, dass es ein Typ ist) auf viel mehr Orte, die Typen sein müssen.
typename
), da (ich glaube , ...) es hat eine Art , dort zu sein. Vielleicht möchten Sielanguage-lawyer
Tag hinzufügen .