Dlaczego MSVC ++ 11 odrzuca constexpr kwalifikację funkcji?

Tak więc, bawiąc się constexpr, MSVC (Visual Studio 2012) dał mi błąd podczas próby zakwalifikowania mojej funkcji za pomocąconstexpr słowo kluczowe używające tego prostego programu (obejmuje pominięty):

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 został podkreślony na czerwono z następującym komunikatem:

Błąd: ta deklaracja nie ma klasy pamięci ani specyfikatora typu

i próbując skompilować program, otrzymaliśmy następujące dane wyjściowe:

1> main.cpp (5): błąd C2144: błąd składni: „int” powinien być poprzedzony znakiem „;”

1> main.cpp (5): błąd C4430: brakujący specyfikator typu - założono int. Uwaga: C ++ nie obsługuje domyślnych int

To naprawdę mnie zastanawia, ponieważ jest to przykład Cppreferenceużywa do zilustrowania użyciaconstexpr. Na początku użyłem prostej funkcji, która zwróciła literał, tj.constexpr int func(){return 5;}, ale który przyniósł ten sam błąd. Zinterpretowałem pierwszy komunikat jako „powinien być funkcją członka struktury lub klasy”, ale przykład z Cppreference pokazuje, że najwyraźniej nie jest to konieczne.

Więc czego tu oczywiście brakuje?

questionAnswers(1)

yourAnswerToTheQuestion