Взаимодействие между decltype и именем члена класса, отслеживающим внешнее имя
Этот код
int clash;
struct Foo {
decltype(clash) clash;
};
тихо компилируется на clang, но не компилируется на gcc, выдавая ошибки
ошибка: объявление 'int Foo :: clash' [-fpermissive]
ошибка: изменяет значение 'clash' с 'int clash' [-fpermissive]
Похоже, что для возникновения ошибки необходимы 2 ингредиента:
Затенение должно выполняться членом класса (без проблем, если это локальная область действия функции).
decltype ([теневое имя]) должно использоваться в области теневого копирования до объявления [теневого имени].
Мой вопрос двоякий:
Оправдан ли gcc отказ от этого кода?Где это сказано в стандарте?