¿Por qué MSVC++11 rechaza la calificación constexpr de una función?


Entonces, jugando con constexpr, MSVC (Visual Studio 2012) me dio un error al intentar calificar mi función con la palabra clave constexpr usando este simple programa (incluye omitido):

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

constexpr fue subrayado en rojo con el siguiente mensaje:

Error: esta declaración no tiene especificador de clase o tipo de almacenamiento

Y tratando de compilar el programa dio la siguiente salida:

1 > principal.cpp (5): error C2144: error de sintaxis: 'int' debe ir precedida de"; "

1 > principal.cpp (5): error C4430: falta especificador de tipo - int asumido. Nota: C++ no soporta default-int

Realmente me desconcierta, ya que es el mismo ejemplo que Cppreference utiliza para ilustrar el uso de constexpr. Al principio usé una función simple que devolvía un literal, es decir, constexpr int func(){return 5;}, pero que producía el mismo error. Interpreté el primer mensaje como "debería ser una función miembro de una estructura o clase", pero el ejemplo de Cppreference muestra que aparentemente no es necesario.

Entonces, ¿qué es lo que obviamente me estoy perdiendo aquí?

Author: JBL, 2013-08-29

1 answers

Simplemente, porque Visual Studio no es compatible con constexpr (antes de Visual Studio 2015).

Tenga en cuenta que MSVC++11 es Visual Studio 2012; VC++10 es Visual Studio 2010.

 38
Author: Chowlett,
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
2016-04-13 10:18:21