Хотя вопрос специально задается о C ++ 11, для тех, кто наткнулся на это и имеет доступ к компилятору C ++ 14, C ++ 14 теперь позволяет выводить типы возврата для обычных функций. Таким образом, пример в вопросе можно настроить так, чтобы он работал так, как нужно, просто опуская предложение -> decltype
... после списка параметров функции:
auto retFun()
{
return [](int x) { return x; }
}
Обратите внимание, однако, что это не будет работать, если в функции появится более одного return <lambda>;
. Это связано с тем, что ограничение вывода типа возвращаемого значения заключается в том, что все операторы возврата должны возвращать выражения одного и того же типа, но каждый лямбда-объект задает свой уникальный тип компилятором, поэтому выражения return <lambda>;
будут иметь разные типы. 1007 *