Вот имеем два примера:
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;
}Вот. Какие свойства/правила языка обеспечивают такое поведение?








