Question

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
}

Je compilé ce code avec ideone. Et se demandait pourquoi il est que donner erreur de compilation. Est fonction constexpr pas autorisé comme argument de template ou il est un bogue dans le compilateur?

Modifier : const int get() changé à int get() De plus, il y a un plus bug avec ideone est que, si vous supprimez constexpr puis déclarant toujours un tableau est autorisé !! Je pense que c'est une caractéristique C99.

Était-ce utile?

La solution

GCC 4.5 (au moins la version utilisée à Ideone) ne prend pas en charge entièrement constexpr, y compris votre utilisation valide; il édulcore un const. GCC 4.6 et prend en charge correctement il.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top