Wann können wir den Rückgabetyp in einem C ++ 11 Lambda weglassen?

Soweit ichkenn, in Standard C ++ 11 nicht C ++ 14) Wenn der Rückgabetyp eines Lambda weggelassen wird, ergibt sich folgender Rückgabetyp:

Der Typ des zurückgegebenen Ausdrucks, wenn das Lambda nur aus einer einzelnen return-Anweisung mit einem Ausdruck besteht, odervoid in allen anderen Fällen.

Consider jetzt diesen Code:

#include <iostream>

auto closure = [](int x)
{
    x++;
    return x;
};

int main()
{
    int y = closure(10);
    std::cout << y << std::endl;
}

Dies sollte unter Fall 2 fallen, der Code wird jedoch so kompiliert, als wäre C ++ 14 mitauto type deduction, sowohl in g ++ 4.9.2, g ++ 5 als auch in clang ++, mit-pedantic -Wall -Wextra -std=c++11. Was ist denn hier los? Interpretiere ich den Standard falsch?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage