Взято из C ++ 0x FDIS (n3290):
Если лямбда-выражение не включает лямбда-декларатор, оно выглядит следующим образом: если бы лямбда-декларатор был (). Если лямбда-выражение не включает конечный-возвращаемый-тип, это как если бы конечный-возвращаемый-тип обозначает следующий тип:
- если составной-оператор имеет форму
{спецификатор-атрибута-seq opt возвращаемое выражение; }
тип возвращаемого выражения после преобразования lvalue-to-rvalue (4.1), преобразование массива в указатель (4.2) и преобразование функции в указатель (4.3);- в противном случае - недействительно.
Почему стандарт не позволяет компилятору анализировать составной оператор и определять тип возвращаемого значения на основе первого найденного return
оператор?
Я не вижу причин для запрета этого, но, возможно, я что-то упускаю.
Пример:
int main(){
// compiler: nope.jpg
auto l = []{
// one computation
// another computation
// yet another one!
return something;
}
}
Изменить : Пожалуйста, не "потому что стандарт так говорит "ответы". :)