constexpr ne compilant pas dans VC2013

Ce code constexpr n’est pas compilé dans Visual Studio 2013 version 12.0.21005.1 REL

Existe-t-il un compilateur Visual Studio plus récent qui fonctionne avec constexpr?

#include  constexpr int factorial(int n) { return n <= 1 ? 1 : (n * factorial(n - 1)); } int main(void) { const int fact_three = factorial(3); std::cout << fact_three << std::endl; return 0; } 

sortie de compilation:

  1> ------ Build started: Projet: Project1, Configuration: Debug Win32 ------
     1> Source.cpp
     1> .... \ source.cpp (3): erreur C2144: erreur de syntaxe: 'int' doit être précédé de ';'
     1> .... \ source.cpp (3): erreur C4430: spécificateur de type manquant - int supposé.  Note: C ++ ne supporte pas default-int
     ========== Build: 0 réussi, 1 échoué, 0 mis à jour, 0 ignoré ========== 

Herb Sutter mentionne constexpr sur son blog mais ne sait pas dans quelle version cela fonctionne / fonctionnera? http://herbsutter.com/2013/09/09/visual-studio-2013-rc-is-now-available/#comment-13521

Microsoft publie une table de compatibilité C ++ 11, sous laquelle constexpr est clairement marqué comme n’étant pas disponible dans Visual Studio 2013 .

Le CTP de novembre 2013 en a, cependant.

Source: Google visual studio constexpr

constexpr n’est pas pris en charge dans Visual Studio 2013 RTM, voir le tableau de compatibilité . Cela n’est pas seulement vrai pour la version RTM, mais également pour les mises à jour Visual Studio.

Si vous souhaitez vous en tenir à Visual Studio 2013, vous pouvez télécharger le CTP de novembre 2013 du compilateur Visual C ++, qui inclut de nouvelles fonctionnalités, voir le blog MSDN . Malheureusement, Microsoft ne dispose d’aucune fusion avec les dernières fonctionnalités de mise à jour de Visual Studio et les fonctionnalités de CTP et indique clairement qu’il n’envisage pas de le faire.

Si nous voulons tout cela, nous devons attendre Visual Studio 2015, voir le blog MSDN sur VS 2015 Preview .

Comme mentionné par les autres, CTP (Customer Technology Preview) de novembre 2013 vous donnera access à constexpr *

Notez que vous devez simplement télécharger le “Platform Toolset” en “Visual C ++ Comstackr Nov 2013 CTP (CTP_Nov2013)” pour utiliser le nouveau compilateur. Vous pouvez le faire en ouvrant les “Pages de propriétés” de votre projet et en allant sur: “Propriétés de configuration”> “Général”, puis en modifiant le “Platform Toolset”.

* Il y a un peu d’informations contradictoires sur la partie de constexpr à constexpr vous avez réellement access, mais ce n’est certainement pas toute la définition standard de constexpr . Microsoft dit ici que le CTP de novembre 2013 ajoute:

support constexpr (sauf pour les constructeurs)

Microsoft dit ici qu’il contient:

constexpr (sauf pour les fonctions membres)

Je ne peux même pas tester si elle prend en charge les fonctions membres, car elle ne prend en charge aucun type de construction constexpr . Par exemple, ce code donne cette erreur avec le CTP de novembre 2013:

erreur C2127: initialisation illégale de l’entité ‘constexpr’ avec une expression non constante

Une remarque supplémentaire: au moment de l’écriture, Visual Studio 2015 Preview ne prend toujours pas en charge la construction constexpr . Garder les doigts croisés sur la version finale.

Vous devez installer la mise à jour VS2013 5. (J’étais sur la mise à jour 3 et elle ne fonctionnait pas) La chose à propos de “Nov 2013 CTP” était inapplicable au moment d’écrire ces lignes. Vous pouvez le faire en allant ici: https://my.visualstudio.com

et va télécharger, ou: https://my.visualstudio.com/Downloads?q=visual%20studio%202013&wt.mc_id=o~msft~vscom~older-downloads