В то время как обсуждение синтаксиса 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, однако, компилирует это просто отлично. Является ли этот код действительным или нет?