Пример:
int main()
{
int a = 0;
struct X
{
decltype(a) a;
};
return 0;
}
decltype(a)
относится к локальному a
в main
, а член, который он объявляет, имеет одно и то же имя.
Clang компилируется без какой-либо проблемы, так же как и MSVC14.
g++ жалуется на него, добавив -fpermissive
, чтобы он прошел, хотя
prog.cc:6:21: error: declaration of 'int main()::X::a' [-fpermissive]
decltype(a) a;
^
prog.cc:3:9: error: changes meaning of 'a' from 'int a' [-fpermissive]
int a = 0;
Какое поведение стандартно-совместимо?