web-dev-qa-db-fra.com

constexpr ne compile 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 <iostream>

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 la compilation:

     1> ------ La construction a commencé: Projet: Projet1, 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é. Remarque: C++ ne prend pas en charge default-int 
 ========== Build: 0 a réussi, 1 a échoué, 0 à 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

43
Damian

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

Le CTP de novembre 2013 l'a, cependant.

Source: Google visual studio constexpr

49

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

Si vous souhaitez vous en tenir à Visual Studio 2013, vous pouvez télécharger le fichier CTP compilateur Visual C++ du mois de novembre 2013 fourni avec certaines nouvelles fonctionnalités. Voir blog MSDN Malheureusement, Microsoft n'a pas fusionné avec les dernières fonctionnalités de Visual Studio Update et CTP et déclare clairement ne pas le faire.

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

9
Werner Henze

Comme mentionné par les autres, novembre 2013: aperçu de la technologie client (CTP) vous donnera accès à constexpr *

Notez que vous devez simplement modifier le "Platform Toolset" en "Visual C++ Compiler 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. Cliquez ensuite sur "Propriétés de configuration"> "Général", puis modifiez le "Jeu d'outils de la plate-forme".

* Il existe quelques informations contradictoires sur la partie de constexpr à laquelle vous avez réellement accès, mais ce n'est certainement pas toute la définition standard de constexpr. Microsoft dit ici que le CTP de novembre 2013 ajoute:

constexpr support (sauf pour les constructeurs)

Microsoft dit ici qu'il contient:

constexpr (sauf pour les fonctions membres)

Je ne peux même pas vérifier s'il prend en charge les fonctions membres, car il ne prend définitivement en charge aucun type de construction constexpr. Par exemple ce code donne cette erreur avec le CTP de novembre 2013:

erreur C2127: initialisation non conforme de l'entité 'constexpr' avec une expression non constante

Remarque supplémentaire: au moment de la rédaction, Visual Studio 2015 Preview ne prend toujours pas en charge la construction constexpr. Garder mes doigts croisés sur la version finale.

3
Jonathan Mee

Vous devez installer VS2013 Update 5. (J'étais sur la mise à jour 3 et cela ne fonctionnait pas) La chose à propos de "Nov 2013 CTP" était inapplicable, à la date de rédaction de ce document .. 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

0
Abei Villafane