Ссылка на сегмент кода ниже:
Выражения константы ядра
int main() {
const std::size_t tabsize = 50;
int tab[tabsize]; // OK: tabsize is a constant expression
std::size_t n = 50;
const std::size_t sz = n;
int tab2[sz]; // error: sz is not a constant expression
// because sz is not initialized with a constant expression
}
Когда я компилирую вышеуказанный сегмент кода, используя (gcc 4.2):
g ++ -ggdb -pedantic -std = c ++ 14 -Wall
для строки, выделенной в коде как ошибка, генерируется только следующее предупреждение:
warning: variable length arrays are a C99 feature
[-Wvla-extension]
int tab2[sz]; // error: sz is not a constant expression
^
Это, кажется, противоречит требованию, изложенному в приведенной выше ссылке, что выражение основной константы не должно оценивать неявное преобразование lvalue-> rvalue, если только значение:
не имеет интегралаили тип перечисления и относится к полному энергонезависимому объекту const, который инициализируется постоянным выражением
Оцените ваши мысли.