Default function pointer mit lambda -> linkage error



  • #include <vector>
    struct Foo;
    std::vector<Foo> getFilteredFoos(bool (*filter)(const Foo &) = [](const Foo &){return true;});
    

    *error: type ‘__lambda0’ with no linkage used to declare function ‘auto __lambda0::operator()(const Foo&) const’ with linkage [-fpermissive]
    std::vector<Foo> getFilteredFoos(bool (filter)(const Foo &) = [](const Foo &){return true;});

    Was will mir der Compiler damit sagen? Was ist linkage?



  • Lamdas kannst du nur in einer auto Variable speichern, da Lamdas total kuriose Typen haben, die man nicht wissen soll. 😃



  • Nö, Lambdas lassen sich durchaus in Funktionszeiger konvertieren wenn nicht capturen. auto ist nur bei denen nötig die es tun.

    Bei mir (gcc 4.7.2) kompiliert das auf jeden Fall. Welche Version hast du? (Ahjo, wohl MSVC ? ... )



  • Der Visual Studio Compiler sagt er kennt Identifier "filter" nicht. Daher habe ich es auf ideone versucht und da kommt die Fehlermeldung her. Die benutzen aber auch den gcc 4.7.2, das finde ich ziemlich verwirrend.


  • Mod

    nwp3 schrieb:

    Der Visual Studio Compiler sagt er kennt Identifier "filter" nicht. Daher habe ich es auf ideone versucht und da kommt die Fehlermeldung her. Die benutzen aber auch den gcc 4.7.2, das finde ich ziemlich verwirrend.

    Die Warnung mit beachten.


Anmelden zum Antworten