2011-02-09 9 views
45

lambdasは、静的メンバー関数を呼び出すために 'this'をキャプチャする必要がありますか?次のコードについて

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

    static void f(); 
}; 

グラム++ 4.6は、エラーを与える:

test.cpp: In lambda function:
test.cpp:44:21: error: 'this' was not captured for this lambda function

(興味深いことに、G ++ 4.5は、コード罰金をコンパイル)。

これはg ++ 4.6のバグですか、または静的メンバー関数を呼び出すには 'this'パラメータをキャプチャすることが本当に必要ですか?私はなぜそれがすべきかわからない、私はB::で通話を修飾した。

+17

これはバグです。 –

+2

GCC 4.7.2のバグです。 'this'をキャプチャとして追加しても動作します。 –

+1

GCC 4.8で修正されました。 – akim

答えて

32

私は同意すべきです、それはうまくコンパイルする必要があります。修正が必要な場合は、参照キャプチャを追加するだけで、gcc 4.6で正常にコンパイルされます。

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

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

ラムダをもっと醜いものにすることができましたか?それには答えないでください。少なくとも私たちはそれらを持っています。 – wheaties

+32

@ wheaties何とか '<>'で動作できないことに失望しています。括弧で囲まれています。 – KitsuneYMG

+20

@KitsuneYMG:http://msdn.microsoft.com/en-us/library/dd293599.aspxに例があります:auto g = [](int x) - > function {return [=](int y){return x + y; }; }; – TonyK

関連する問題