Приносят ли универсальные лямбда-выражения С++ 14 реальное улучшение языка или они являются своего рода синтаксическим сахаром? Бывают ли ситуации, когда
[](auto param1, auto param2, /* ... */ auto paramN)
{
return /* ... */;
}
нельзя заменить на
template <typename Type1, typename Type2, /* ... */ typename TypeN>
auto foo(Type1&& param1, Type2&& param2, /* ... */ TypeN&& paramN)
{
return /* ... */;
}
or
struct bar
{
template <typename Type1, typename Type2, /* ... */ typename TypeN>
auto operator()(Type1&& param1, Type2&& param2, /* ... */ TypeN&& paramN)
{
return /* ... */;
}
};
?
@Kerrek SB предоставил очень интересные ссылки в комментариях, иллюстрирующих возможности общих лямбда-выражений:
Boost.Hana: гетерогенные комбинаторы для выразительного метапрограммирования (github)
lambda
— это синтаксический сахар; Для более легкого ›o‹ - person ikh   schedule 19.08.2014operator()
. Если компилятор может это сделать, я не могу представить ситуацию, в которой вы не могли бы сделать это самостоятельно. (Но в недавнем прошлом я видел несколько очень творческих применений лямбда-выражений, которые позволяют делать то, что я не считал возможным, поэтому я еще не совсем уверен.) - person   schedule 19.08.2014