На жаль , вони не входять до C ++ 11 ( http://ideone.com/NsqYuq ):
auto glambda = [](auto a) { return a; };
int main() {}
З g ++ 4,7:
prog.cpp:1:24: error: parameter declared ‘auto’
...
Однак спосіб його впровадження в C ++ 14 відповідно до пропозиції Портленда щодо загальних лямбдаз :
[](const& x, & y){ return x + y; }
Це призведе до більшої частини звичайного створення анонімного класу функторів, але за відсутності типів компілятор випустить шаблонного члена- operator()
:
struct anonymous
{
template <typename T, typename U>
auto operator()(T const& x, U& y) const -> decltype(x+y)
{ return x + y; }
};
Або відповідно до нової пропозиції Пропозиція для загальних (поліморфних) лямбдаських виразів
auto L = [](const auto& x, auto& y){ return x + y; };
--->
struct /* anonymous */
{
template <typename T, typename U>
auto operator()(const T& x, U& y) const // N3386 Return type deduction
{ return x + y; }
} L;
Так, так, для кожної перестановки параметрів виникає нова інстанція, однак, члени цього функтора все одно поділяться (тобто захоплені аргументи).