constexpr no compilando en VC2013


Este código constexpr no se compila en Visual Studio 2013 versión 12.0.21005.1 REL

¿Hay un compilador más nuevo de Visual Studio que funcione con 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;
}

Salida de la compilación:

    1>------ Build started: Project: Project1, Configuration: Debug Win32 ------
    1>  Source.cpp
    1>....\source.cpp(3): error C2144: syntax error : 'int' should be preceded by ';'
    1>....\source.cpp(3): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Herb Sutter menciona constexpr en su blog, pero no está claro en qué versión funciona / funcionará? http://herbsutter.com/2013/09/09/visual-studio-2013-rc-is-now-available/#comment-13521

Author: hivert, 2013-11-28

4 answers

Microsoft publica una tabla de compatibilidad de C++11, bajo la cual constexprestá claramente marcada como no disponible en Visual Studio 2013 .

Sin embargo, el CTP de noviembre de 2013 lo tiene.

Fuente: Google visual studio constexpr

 47
Author: Lightness Races in Orbit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-28 12:37:50

constexpr no es compatible con Visual Studio 2013 RTM, consulte la tabla de compatibilidad . Esto no solo es cierto para la versión RTM, sino también para las actualizaciones de Visual Studio.

Si desea atenerse a Visual Studio 2013, puede descargar el compilador Visual C++ Noviembre 2013 CTP que viene con algunas características nuevas, consulte MSDN blog. Desafortunadamente, Microsoft no tiene ninguna fusión con las últimas características de actualización de Visual Studio y las características de CTP y afirma claramente que no planean hacerlo.

Si lo queremos todo, tenemos que esperar a Visual Studio 2015, ver el blog de MSDN sobre VS 2015 Preview.

 9
Author: Werner Henze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-01 08:55:18

Como es mencionado por los demás, Noviembre 2013 Customer Technology Preview(CTP) le dará acceso a constexpr *

Tenga en cuenta que simplemente descargando el tendrá que cambiar su "Platform Toolset" a "Visual C++ Compiler Nov 2013 CTP (CTP_Nov2013)" para usar el nuevo compilador. Puede hacerlo abriendo las "Páginas de propiedades" de su proyecto y yendo a: "Propiedades de configuración" > "General" y luego cambiando el "Conjunto de herramientas de la plataforma".

*Hay un poco de conflicto información sobre qué porción de constexpr realmente tiene acceso, pero definitivamente no es toda la definición estándar de constexpr. Microsoft dice aquí que el CTP de noviembre de 2013 agrega:

constexpr soporte (excepto para constructores)

Microsoft dice aquí que contiene:

constexpr (excepto las funciones miembro)

Ni siquiera puedo probar si tiene soporte para funciones miembro, porque definitivamente no tiene soporte para cualquier tipo de construcción constexpr. Por ejemplo este código da este error con el CTP de noviembre de 2013:

Error C2127: inicialización ilegal de la entidad 'constexpr' con una expresión no constante

Una nota adicional: En el momento de escribir este artículo, la vista previa de Visual Studio 2015 todavía no es compatible con la construcción constexpr. Manteniendo mis dedos cruzados en el lanzamiento final.

 3
Author: Jonathan Mee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-25 13:06:52

Necesita instalar VS2013 Update 5. (Yo estaba en la actualización 3 y no estaba funcionando) La cosa sobre "Nov 2013 CTP" era inaplicable, a partir de este escrito. Puedes hacerlo desde aquí: https://my.visualstudio.com

Y va a descargar, o : https://my.visualstudio.com/Downloads?q=visual%20studio%202013&wt.mc_id=o~msft~vscom~older-downloads

 0
Author: Abei Villafane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-28 06:53:46