Двумерный массив <array>. const int value = array.size(); value не константа? - C++ - Ответ 9139333

Такая логика применима именно и только к

оптимизациям

- то есть к контекстам, в которых формально безразлично, будет ли значение вычислено на этапе компиляции или на этапе выполнения. Это чисто

количественный

вопрос, ибо такие контексты не влияют на корректность (то есть компилируемость) программы.

Когда же речь заходит о таких принципиальных

качественных

вопросах, как формирование Целочисленных Константных Выражений, т.е. решениях, влияющих на компилируемость кода, то тут спецификация языка никакой свободы компиляторам не предоставляет. Контексты, в которых

const

и

constexpr

обязаны порождать Целочисленные Константные Выражения (т.е. порождать значения, известные на стадии компиляции), оговорены однозначно.

Вопрос в данном случае только в том, относится ли данный случай к набору таких контекстов.

Вернуться к обсуждению:

Двумерный массив <array>. const int value = array.size(); value не константа? C++