] Есть ли причина, по которой лямбда-выражения не могут определять возвращаемый тип, если он содержит более одного оператора?

Взято из 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;
  }
}

Изменить : Пожалуйста, не "потому что стандарт так говорит "ответы". :)

6
задан Xeo 26 November 2011 в 22:57
поделиться