Ist es gültig, die Funktion des Vorlagenarguments zu verwenden?
-
28-10-2019 - |
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.
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