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?