wake-up-neo.net

constexpr wird in VC2013 nicht kompiliert

Dieser constexpr-Code wird in Visual Studio 2013 Version 12.0.21005.1 REL nicht kompiliert

Gibt es einen neueren Visual Studio-Compiler, der mit constexpr funktioniert?

#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;
}

ausgabe von der Zusammenstellung:

     1> ------ Aufbau gestartet: Projekt: Projekt1, Konfiguration: Debug Win32 ------
 1> Source.cpp 
 1> ....\source.cpp (3): Fehler C2144: Syntaxfehler: 'int' sollte mit ';' .__ vorangestellt werden. 1> ....\source.cpp (3): Fehler C4430: Fehlender Typbezeichner - int angenommen. Anmerkung: C++ unterstützt default-int .__ nicht. ========== Build: 0 erfolgreich abgeschlossen, 1 fehlgeschlagen, 0 aktuell, 0 übersprungen ==========

Herb Sutter erwähnt Constexpr in seinem Blog, ist aber unklar, in welcher Version es funktioniert/wird? http://herbsutter.com/2013/09/09/visual-studio-2013-rc-is-now-available/#comment-13521

43
Damian

Microsoft veröffentlicht eine C++ 11-Kompatibilitätstabelle, in der constexpreindeutig als in Visual Studio 2013 nicht verfügbar markiert ist .

Das CTP vom November 2013 hat es jedoch.

Quelle: Google visual studio constexpr

constexpr wird in Visual Studio 2013 RTM nicht unterstützt. Weitere Informationen finden Sie in der -kompatibilitätstabelle . Dies gilt nicht nur für die RTM - Version, sondern auch für die Visual Studio-Updates.

Wenn Sie sich an Visual Studio 2013 halten möchten, können Sie den Visual C++ - Compiler für November 2013 CTP herunterladen, der einige neue Funktionen enthält, siehe MSDN-Blog . Leider hat Microsoft keine Fusion mit den neuesten Visual Studio Update-Funktionen und den CTP-Funktionen. Sie gibt eindeutig an, dass sie dies nicht beabsichtigen.

Wenn wir alles wollen, müssen wir auf Visual Studio 2015 warten. Siehe den MSDN-Blog über VS 2015 Preview .

9
Werner Henze

Wie von den anderen erwähnt, gibt November 2013 Customer Technology Preview (CTP) Ihnen Zugriff auf constexpr *

Wenn Sie das herunterladen, müssen Sie Ihr "Platform Toolset" in "Visual C++ Compiler Nov 2013 CTP (CTP_Nov2013)" ändern, um den neuen Compiler verwenden zu können. Sie können dies tun, indem Sie die "Property Pages" Ihres Projekts öffnen. Gehen Sie dazu auf "Konfigurationseigenschaften"> "Allgemein" und ändern Sie dann das "Platform Toolset".

* Es gibt einige widersprüchliche Informationen darüber, auf welchen Teil von constexpr Sie tatsächlich Zugriff haben, aber es ist definitiv nicht die gesamte Standarddefinition von constexpr. Microsoft sagt hier dass das CTP vom November 2013 Folgendes hinzufügt:

constexpr Unterstützung (außer für Konstruktoren)

Microsoft sagt hier dass es enthält:

constexpr (außer für Elementfunktionen)

Ich kann nicht einmal testen, ob es Memberfunktionen unterstützt, da es definitiv keine Unterstützung für constexpr-Konstruktionen gibt. Zum Beispiel dieser Code gibt diesen Fehler beim November 2013-CTP aus:

fehler C2127: unzulässige Initialisierung von 'constexpr' Entität mit einem nicht konstanten Ausdruck

Ein zusätzlicher Hinweis: Zum Zeitpunkt des Schreibens unterstützt die Visual Studio 2015 Preview noch keine constexpr-Konstruktion. Ich drücke die Daumen für die endgültige Veröffentlichung.

3
Jonathan Mee

Sie müssen VS2013 Update 5 installieren. (Ich war auf Update 3 und es hat nicht funktioniert.). Die Sache mit "Nov 2013 CTP" war zum Zeitpunkt des Schreibens nicht zutreffend . Sie können dies hier tun: https://my.visualstudio.com

und zum Download gehen oder: https://my.visualstudio.com/Downloads?q=visual%20studio%202013&wt.mc_id=o~msft~vscom~older-downloads

0
Abei Villafane