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.

È stato utile?

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
scroll top