examples c++ visual-studio-2012 c++11 constexpr

lambda examples c++



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

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.

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 sencillo 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 clase de almacenamiento o especificador de tipo

y tratando de compilar el programa dio el siguiente resultado:

1> main.cpp (5): error C2144: error de sintaxis: ''int'' debe ir precedido por '';''

1> main.cpp (5): error C4430: especificador de tipo faltante - int assume. Nota: C ++ no es compatible con default-int

Realmente me desconcierta, ya que es el ejemplo que utiliza Cppreference 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 "debe 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 falta aquí?