12
votes

Est-ce que tout compilateur prend en charge Constexpr encore?

Je veux jouer avec consexpr , est-ce qu'un compilateur le supporte encore?


0 commentaires

4 Réponses :


10
votes

Le projet Apache STDCXX a Une belle table détaillant les fonctionnalités C ++ 0x sont prises en charge par laquelle compilateurs . Il a été mis à jour régulièrement et couvre la plupart des compilateurs modernes C ++.

selon cela, seul GCC 4.5 prend en charge consexpr (note que ce support peut être expérimental).

entre cette liste et ce qui a été dit dans les commentaires, il apparaît que la réponse est "non"


4 commentaires

Tableau officiel de support GCC indique que consexpr n'est pas pris en charge du tout. Mon code compile avec consexpr , mais il semble avoir aucun effet que ce soit. Ma première hypothèse est que le mot clé est simplement ignoré?


@Fred: Peut-être que personne ne le supporte alors. Je n'utilise pas la GCC assez souvent pour en savoir beaucoup sur son soutien C ++ 0X, tristement.


Il suffit de tester sur g ++ (GCC) 4.6.0 20100605 - Impossible de créer une matrice de taille renvoyée par une fonction ConstExpr. Lecture de Bugzilla, il apparaît à la syntaxe introduite par GCC 4.5, mais pas (encore) sémantique.


La version publiée de GCC4.6 a maintenant consexpr prise en charge.



-2
votes

convenu, g ++ 4.5 et 4.6 prennent en charge le mot-clé, mais ignorez les implications. Je viens de compiler un programme factorial simple (sur les deux versions à l'aide de -std = c ++ 0x) avec la ligne: xxx

et il compilé et couru, mais lors de l'examen de la source ASM (-S Option ) Il a montré que la fonction a été appelée avec le paramètre au lieu d'être déterminée par le compilateur.


1 commentaires

La réponse est inutile sans montrer votre programme de test. Votre description sonne comme si vous avez mal compris consexpr (et la définition de fonction que vous indiquez n'est pas valide C ++. C ++ n'a pas de "Implicit int").



4
votes

à partir de juillet 2011, GCC 4.7 prend en charge la consexpr. Vous devez le construire de SVN cependant.


0 commentaires

-9
votes

L'utilisation de "consexpr" est vraiment facile. Regardez cette pièce de code:

constexpr int get_five(){
return 5;}


1 commentaires

consexpr int factorielle (int n) {retour n == 0? 1: N * factorial (N-1); } est parfaitement valide.