Interacción entre decltype y nombre de miembro de clase sombreando un nombre externo

Este código

int clash;

struct Foo {
  decltype(clash) clash;
};

se compila silenciosamente en el sonido metálico, pero no se compila en gcc dando los errores

error: declaración de 'int Foo :: clash' [-fpermissive]

error: cambia el significado de 'clash' de 'int clash' [-fpermissive]

Parece que se requieren 2 ingredientes para que surja el error:

El sombreado debe ser realizado por un miembro de la clase (no hay problema si es el alcance local de una función).

decltype ([nombre sombreado]) debe usarse en el ámbito de sombreado antes de la declaración de [nombre sombreado].

Mi pregunta es doble:

¿Se justifica gcc al rechazar este código?¿Dónde lo dice en el estándar?

Respuestas a la pregunta(1)

Su respuesta a la pregunta