“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)