В то время как обсуждение синтаксиса Type(identifier);
и как это объявление, я столкнулся с Type(::x);
, не работающим с Clang. Я ожидал бы, что с учетом глобальной переменной x
он будет рассматривать ::x
как выражение (::x + 2
works) и отбрасывает ::x
в Type
. Однако он дает ошибку компилятора.
Вот короткий пример:
int x;
int main() {
int(::x); //does not compile
int(::x + 2); //compiles
}
Ошибка компилятора, данная Clang 3.5:
ошибка: определение или переопределение "x" не может назвать глобальную область
GCC 4.9.0, однако, компилирует это просто отлично. Является ли этот код действительным или нет?