Frage

constexpr int get () { return 5; }
template<int N> struct Test {};

int main ()
{
  int a[get()];  // ok
  Test< get() > obj;  // error:'int get()' cannot appear in a constant-expression
}

Ich habe Zusammengestellt diesen Code mit ideone. Und fragte sich, warum es Kompilierungsfehler gibt. Ist constexpr Funktion nicht erlaubt als template Argument oder es ist ein Fehler im Compiler?

Bearbeiten: geändert const int get() zu int get()Darüber hinaus gibt es noch einen Insekt mit ideone ist das, wenn Sie entfernen constexpr dann Es ist noch ein Array erlaubt, ein Array zu erklären!! Ich denke, das ist eine C99 -Funktion.

War es hilfreich?

Lösung

GCC 4.5 (zumindest die bei IDEone verwendete Version) unterstützt nicht vollständig constexpr, einschließlich Ihrer gültigen Verwendung; es wässt auf a const. GCC 4.6 und up unterstützt es richtig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top