2012-06-18 2 views
3

Possible Duplicate:
lambdas require capturing 'this' to call static member function?utilisation C++ 11 lambda en fonction membre non-statique et appeler la fonction membre statique de même classe

Je veux utiliser C++ 11 lambda dans une fonction membre non-statique et appeler une fonction membre statique de même classe:

class A { 
    static void a() {} 
public: 
    void x() { 
     []() { A::a(); }(); 
    } 
}; 

Mais gcc4.6 et gcc4.7 deux eu une erreur: erreur: « ceci » n'a pas été saisie pour cette fonction lambda

Pourquoi besoin lambda « ce » depuis ' a 'est une fonction membre statique.

Et si 'x' est statique ou 'a' est la fonction de membre statique d'une autre classe, 'ceci' n'est pas nécessaire, pourquoi?

+0

Pourquoi avez-vous besoin de lambda dans ce cas? pourquoi n'appelez-vous pas simplement 'A :: a()'? – Naveen

+0

VS2010 SP1 se compile et s'exécute sans erreur. – Simon

+0

L'autre question n'a pas l'ID de bogue approprié cependant. Devrait-il être modifié? – dirkgently

Répondre

1
class A { 
    static void a() {} 
public: 
    void x() { 
     []() { A::a(); }(); 
    } 
}; 

int main() { A a; a.x(); } 

Cela compile bien avec clang 3.2. De plus, il n'y a aucune raison pour que cela ne soit pas compilé. C'est un bug dans GCC selon les notes. Cela devrait être corrigé en 4.7.1. Notez que gcc a démarré tôt mais a pris du retard sur clang en supportant certaines fonctionnalités de C++ 11.

Modifier: Il est un SO question similaire que vous souhaitez vérifier.

+0

On dirait que c'est un bug de gcc et gcc4.7.1 est toujours faux. Wish 4.7.2 peut le réparer. – sealiay

+0

@sealiay: Je pense que vous devriez publier vos résultats sur les notes de bugs de GCC! (N'oubliez pas de mentionner la plateforme sur laquelle vous vous trouvez et les autres détails requis.) – dirkgently

Questions connexes