Interaktion zwischen decltype und Klassenmitgliedsname, die einen externen Namen schattiert

Dieser Code

int clash;

struct Foo {
  decltype(clash) clash;
};

compiles still auf clang, aber nicht auf gcc zu kompilieren geben die Fehler

Fehler: Deklaration von 'int Foo :: clash' [-fpermissive]

error: Ändert die Bedeutung von 'clash' von 'int clash' [-fpermissive]

s scheint, dass 2 Zutaten erforderlich sind, damit der Fehler auftritt:

Das Shadowing muss von einem Klassenmitglied durchgeführt werden (kein Problem, wenn es sich um den lokalen Bereich einer Funktion handelt).

decltype ([Shadowed Name]) muss im Shadowing-Bereich vor der Deklaration von [Shadowing-Name] verwendet werden.

Meine Frage ist zweifach:

Ist gcc berechtigt, diesen Code abzulehnen?Wo steht das im Standard?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage