Pour le code suivant:
struct B
{
void g()
{
[]() { B::f(); }();
}
static void f();
};
g ++ 4.6 donne l'erreur:
test.cpp: Dans la fonction lambda:
test.cpp: 44: 21: erreur: "ceci" n'a pas été capturé pour cette fonction lambda
(Fait intéressant, g ++ 4.5 compile bien le code).
Est-ce un bogue dans g ++ 4.6, ou est-il vraiment nécessaire de capturer le paramètre "this" pour pouvoir appeler une fonction membre statique? Je ne vois pas pourquoi ça devrait être, j'ai même qualifié l'appel avec B::
.
Je suis d'accord, il devrait compiler très bien. Pour le correctif (si vous ne le saviez pas déjà), ajoutez simplement la capture de référence et elle se compilera très bien sur gcc 4.6
struct B
{
void g()
{
[&]() { B::f(); }();
}
static void f() { std::cout << "Hello World" << std::endl; };
};