69 votes

Les lambdas nécessitent-ils de capturer 'this' pour appeler une fonction membre statique?

Pour le code suivant:

struct B
{
    void g()
    {
        []() { B::f(); }();
    }

    static void f();
};

g++ 4.6 donne l'erreur:

test.cpp: En fonction lambda:
test.rpc:44:21: erreur: "il" n'a pas été saisie pour cette fonction lambda

(Fait intéressant, g++ 4.5 compile le code d'amende).

Est-ce un bug dans g++ 4.6, ou est-il vraiment nécessaire de capturer le " il " paramètre pour être en mesure d'appeler une fonction membre statique? Je ne vois pas pourquoi il devrait l'être, j'ai même qualifié l'appel avec l' B::.

60voto

Mikael Persson Points 7174

Je suis d'accord, il devrait bien compiler. Pour le correctif (si vous ne le saviez pas déjà), ajoutez simplement la capture de référence et la compilation se déroulera sans problème sur gcc 4.6

 struct B
{
    void g()
    {
        [&]() { B::f(); }();
    }

    static void f() { std::cout << "Hello World" << std::endl; };
};
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X