Dieser CodeInteraktion zwischen decltype und Klassenelementname einen externen Namen
int clash;
struct Foo {
decltype(clash) clash;
};
kompiliert still auf Klirren Shadowing, aber nicht auf gcc geben die Fehler
error: declaration of 'int Foo::clash' [-fpermissive]
error: changes meaning of 'clash' from 'int clash' [-fpermissive]
Es scheint, dass zwei Zutaten zu kompilieren sind erforderlich, damit der Fehler auftritt:
Die Spiegelung muss von einem Klassenmitglied durchgeführt werden (kein Problem, wenn es der lokale Bereich einer Funktion ist).
decltype ([schattierter Name]) muss im Shadowing-Bereich vor der Deklaration von [Shadowing Name] verwendet werden.
Meine Frage ist zweifach:
- gcc gerechtfertigt ist in dieser Code Ablehnung?
- Wo sagt es so in der Norm?
Worum geht es: 'int chash [sizeof (clash)];'? Was sagt der Compiler? Ich denke, es geht nicht um C++ 11-Compiler, sondern darum, wie sie sich in solchen Fällen verhalten. – Ajay