Sfortunatamente , non fanno parte di C ++ 11 ( http://ideone.com/NsqYuq ):
auto glambda = [](auto a) { return a; };
int main() {}
Con g ++ 4.7:
prog.cpp:1:24: error: parameter declared ‘auto’
...
Tuttavia , il modo in cui potrebbe essere implementato in C ++ 14 secondo la proposta di Portland per lambda generici :
[](const& x, & y){ return x + y; }
Questo produrrebbe per la maggior parte la solita creazione di una classe funtore anonima, ma con la mancanza di tipi il compilatore emetterebbe un membro basato su modelli operator()
:
struct anonymous
{
template <typename T, typename U>
auto operator()(T const& x, U& y) const -> decltype(x+y)
{ return x + y; }
};
O secondo la proposta più recente Proposta per espressioni Lambda generiche (polimorfiche)
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;
Quindi sì, per ogni permutazione di parametri, sorgerebbe una nuova istanza, tuttavia, i membri di quel funtore sarebbero ancora condivisi (cioè gli argomenti catturati).