Вот имеем два примера:
const int x = 5;
int main(int argc, char** argv)
{
int x = x;
cout << x;
return 0;
}
const int x = 5;
int main(int argc, char** argv)
{
int y = x;
cout << y;
return 0;
}
Я бы мог это понять, если бы небыло третьего примера:
const int x = 5;
int main(int argc, char** argv)
{
int x[x];
cout << sizeof(x) / sizeof(int);
return 0;
}
Вот. Какие свойства/правила языка обеспечивают такое поведение?