web-dev-qa-db-fra.com

les lambdas nécessitent-ils de capturer «ceci» pour appeler la fonction membre statique?

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::.

55
HighCommander4

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; };
};
43
Mikael Persson