Cela fonctionne et est valide en C++11 code, parce que les arguments de modèle sont les temps de compilation uniquement:
template <int x>
constexpr int do_something() {
static_assert(x > 0, "x must be > 0");
return x + 5;
}
Je rencontre les mêmes problèmes que vous avez fait avec des expressions constantes en C++. Il y a quelques claire de la documentation sur constexprs pour le moment. Et notez qu'il y ait quelques bugs connus dans gcc est issue tracker, mais ton problème ne semble pas être un bug.
Notez que si vous déclarez constexpr des fonctions à l'intérieur des classes, vous n'êtes pas en mesure de les utiliser à l'intérieur de la classe. Cela semble également être pas un bug.
Edit: Ce qui est permis selon la norme: 7.1.3 unis
... ou un composé déclaration qui contient uniquement
- null états,
-
static_assert-déclarations
- typedef déclarations d'alias et les déclarations qui ne sont pas
définir des classes ou des énumérations,
- à l'aide de déclarations,
- directives à l'aide,
- et exactement une instruction de retour