Taken from the C++0x FDIS (n3290):
If a lambda-expression does not include a lambda-declarator, it is as if the lambda-declarator were (). If a lambda-expression does not include a trailing-return-type, it is as if the trailing-return-type denotes the following type:
- if the compound-statement is of the form
{ attribute-specifier-seqopt return expression ; }
the type of the returned expression after lvalue-to-rvalue conversion (4.1), array-to-pointer conversion
(4.2), and function-to-pointer conversion (4.3);
- otherwise, void.
Why doesn't the standard allow the compiler to analyse the compound-statement and determine the return type based on the first found return
statement?
I can't see any reason to not allow this, but maybe I'm overlooking something.
Example:
int main(){
// compiler: nope.jpg
auto l = []{
// one computation
// another computation
// yet another one!
return something;
}
}
Edit: Please no "because the standard says so" answers. :)
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…