Est-il valide pour utiliser la fonction constexpr comme argument de modèle?
-
28-10-2019 - |
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.
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