¿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 elconstexpr palabra clave usando este programa simple (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 Estaba subrayado en rojo con el siguiente mensaje:

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

Y al intentar compilar el programa se obtuvo el siguiente resultado:

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

1> main.cpp (5): error C4430: falta el especificador de tipo - se supone que se trata de un int. Nota: C ++ no es compatible con default-int

Realmente me desconcierta, ya que es el mismo ejemplo que Cppreferenceutiliza para ilustrar el uso deconstexpr. Al principio usé una función simple que devolvía un literal, es decir,constexpr int func(){return 5;}, pero que produjo 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 falta aquí?

Respuestas a la pregunta(1)

Su respuesta a la pregunta