quanto ne know, nello standard C++ 11 (non C++ 14), quando omettendo il tipo di ritorno di un lambda, il tipo restituito è dedotta per essere:Quando possiamo omettere il tipo restituito in un lambda C++ 11?
- Il tipo di l'espressione restituita, ogni volta che il lambda consiste in nient'altro che una singola istruzione di ritorno con un'espressione, oppure
void
in tutti gli altri casi.
consideri ora questo codice:
#include <iostream>
auto closure = [](int x)
{
x++;
return x;
};
int main()
{
int y = closure(10);
std::cout << y << std::endl;
}
Questo dovrebbe rientrare in caso 2., tuttavia il codice viene compilato come se fosse C++ 14 con auto
tipo deduzione, sia g ++ 4.9.2 , g ++ 5 e clang ++, con -pedantic -Wall -Wextra -std=c++11
. Cosa sta succedendo qui? Sto interpretando lo standard sbagliato?
vedere [è la discussione del mio libro di tipi restituiti Lamba sbagliato?] (Http://stackoverflow.com/q/14738335) Inoltre, [Quando possiamo omettere il tipo di ritorno in C++ 11 lambda?] (Http : //stackoverflow.com/q/28955478), [? Perché le funzioni lambda drop dedurre il tipo di ritorno di riferimento di default] (http://stackoverflow.com/q/41534031) e [esplicita ritorno tipo di Lambda] (http: //stackoverflow.com/q/9620098). – jww