Interação entre decltype e nome do membro da classe que sombreia um nome externo
Este código
int clash;
struct Foo {
decltype(clash) clash;
};
compila silenciosamente no clang, mas falha ao compilar no gcc, fornecendo os erros
erro: declaração de 'int Foo :: clash' [-fpermissive]
erro: altera o significado de 'choque' de 'int choque' [-fpermissive]
Parece que são necessários 2 ingredientes para que o erro ocorra:
A sombra deve ser feita por um membro da classe (não há problema se for o escopo local de uma função).
decltype ([nome sombreado]) deve ser usado no escopo de sombreamento antes da declaração de [nome sombreado].
Minha pergunta é dupla:
O gcc é justificado em rejeitar este código?Onde diz isso no padrão?