È valido utilizzare la funzione costexpr come argomento modello?
-
28-10-2019 - |
Domanda
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
}
io ho ha compilato questo codice con ideone. E mi chiedeva perché sta dando un errore di compilazione. È constexpr
funzione non consentita come template
argomento o è un bug nel compilatore?
Modificare: cambiato const int get()
a int get()
Inoltre, ce n'è uno in più insetto con ideone è quello, se rimuovi constexpr
poi Ancora dichiarando un array è consentito!! Penso che sia una funzione C99.
Soluzione
GCC 4.5 (almeno la versione utilizzata su Ideone) non supporta del tutto constexpr
, incluso il tuo utilizzo valido; Acquista fino a un const
. GCC 4.6 e lo supporta correttamente.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow