Quel est le type de lambda quand déduit avec “auto” en C++11?

J'ai eu l'impression que, le type d'une expression lambda est un pointeur de fonction. Lorsque j'ai effectué les test suivant, je l'ai trouvé mauvais (démo).

#define LAMBDA [] (int i) -> long { return 0; }
int main ()
{
  long (*pFptr)(int) = LAMBDA;  //ok
  auto pAuto = LAMBDA;  //ok
  assert(typeid(pFptr) == typeid(pAuto));  //assertion fails !
}

Est au-dessus de code manquant tout point ? Si non, alors, qu'est-ce que le typeof une expression lambda quand déduit auto mot-clé ?

  • “le type d'une expression lambda est un pointeur de fonction” – qui serait inefficace et manquer le point de l'ensemble des lambdas.
InformationsquelleAutor iammilind | 2011-10-31