Variable Length Array (VLA) in C ++ - Compilern

Wie wir bereits wissen, VLA (standardisiert in C99) sind nicht Bestandteil des Standards in C ++.

So ist der Code unten"illegal" imC ++:

void foo(int n) {
  int vla[n];
  for (int i = 0; i < n; ++i) {
    vla[i] = i;
  }
}

Trotzdem der Compiler g ++ undclang ++) akzeptiert der Code als gültige Syntax, wobei nur ein @ erzeugt wiWarnun im Fall-pedantic flag is enable.

ISO C ++ verbietet Array variabler Länge "vla" [-Wvla]

Meine Fragen sind:

Warum akzeptiert der Compiler diese Deklaration?
Der Compiler kann ein Array mit der Länge @ nicht einfach ablehne[is-no-know-at-compile-time]?
Gibt es eine Art von Kompatibilitätssyntaxregel, die befolgt werden muss?

Was sagt der Standard dazu?
Aus dem erzeugten Assembler-Code sehe ich, dass der Compiler in der Schleife im Stapel schreibt, wie ein normales Array, aber ich kann nichts über das Standardverhalten finden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage