“Konstante Ausdrücke” vor C ++ 11

Dasconstexpr keyword wurde in C ++ 11 eingeführt, da (glaube ich) die entsprechende Idee von "konstanten Ausdrücken" war. Dieses Konzept war jedoch in C ++ 98 / c ++ 03 implizit vorhanden, da für Array-Deklarationen ein konstanter Ausdruck erforderlich ist:

// 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];

Es gibt andere "konstante Ausdrücke", d. H. Ausdrücke, die zur Kompilierungszeit ausgewertet werden können (und / oder müssen); Ein Beispiel sind Template-Argumente.

Existieren für C ++ 11-Vorgängerversionen die folgenden Elemente, entweder in den C ++ 98/03-Standards oder anderswo?

Eine vollständige Liste syntaktischer Konstrukte, die konstante Ausdrücke erfordern (z. B. Array-Deklarationen und Template-Instantiierungen) Die Regeln für solche konstanten Ausdrücke (vermutlich wäre dies nur eine Zuordnung von den Elementen in der obigen Liste zu ihren Definitionen in der Norm)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage