Ключевое слово constexpr
было введено в С++ 11, поскольку (я думаю) была соответствующей идеей "постоянных выражений". Однако эта концепция неявно присутствует в С++ 98/С++ 03, так как объявления массива требуют постоянного выражения:
// valid:
int a[sizeof(int)];
int b[3+7];
int c[13/4];
const int n = 3;
int d[n];
// invalid:
int m = 4;
int e[m];
Существуют и другие "постоянные выражения", т.е. выражения, которые могут (и/или должны быть) оцениваться во время компиляции; одним из примеров является аргумент шаблона.
Для pre-С++ 11 существует ли следующее: либо в стандартах С++ 98/03, либо в другом месте?
- Полный список синтаксических конструкций, требующих постоянных выражений (например, объявления массивов и экземпляры шаблонов)
- Правила, регулирующие такие постоянные выражения (предположительно это будет просто отображение из элементов в приведенном выше списке их определений в стандарте)