Malheureusement , ils ne font pas partie de C ++ 11 ( http://ideone.com/NsqYuq ):
auto glambda = [](auto a) { return a; };
int main() {}
Avec g ++ 4.7:
prog.cpp:1:24: error: parameter declared ‘auto’
...
Cependant , la façon dont il pourrait être implémenté en C ++ 14 selon la proposition de Portland pour les lambdas génériques :
[](const& x, & y){ return x + y; }
Cela donnerait pour l'essentiel la création habituelle d'une classe de foncteurs anonyme, mais avec le manque de types, le compilateur émettrait un membre basé sur un modèle operator()
:
struct anonymous
{
template <typename T, typename U>
auto operator()(T const& x, U& y) const -> decltype(x+y)
{ return x + y; }
};
Ou selon la nouvelle proposition Proposition d'expressions lambda génériques (polymorphes)
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;
Alors oui, pour chaque permutation de paramètres, une nouvelle instanciation se produirait, cependant, les membres de ce foncteur seraient toujours partagés (c'est-à-dire les arguments capturés).