Infelizmente , eles não fazem parte do C ++ 11 ( http://ideone.com/NsqYuq ):
auto glambda = [](auto a) { return a; };
int main() {}
Com g ++ 4.7:
prog.cpp:1:24: error: parameter declared ‘auto’
...
No entanto , a forma como pode ser implementado em C ++ 14 de acordo com a proposta de Portland para lambdas genéricos :
[](const& x, & y){ return x + y; }
Isso resultaria na maior parte da criação usual de uma classe de functor anônima, mas com a falta de tipos, o compilador emitiria um membro modelado- operator()
:
struct anonymous
{
template <typename T, typename U>
auto operator()(T const& x, U& y) const -> decltype(x+y)
{ return x + y; }
};
Ou de acordo com a proposta mais recente Proposta para Expressões Lambda Genéricas (Polimórficas)
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;
Então, sim, para cada permutação de parâmetros, uma nova instanciação surgiria, no entanto, os membros desse functor ainda seriam compartilhados (ou seja, os argumentos capturados).