2012-04-20 11 views
1

私はMSVC2010でラムダに問題があります。C++ 0xのラムダ+高める::関数のトラブル

コンパイル成功です:

auto f1 = []() { }; 
boost::function<void()> a = f1; 

しかし、それはエラーC2440もたらします:

auto f2 = []() 
{ 
    auto f3 = []() { }; 
    boost::function<void()> b = f3; 
}; 

エラーC2440:

'initializing' : cannot convert from 'int' to 'boost::function<Signature>' 
    with 
    [ 
     Signature=void (void) 
    ] 
    No constructor could take the source type, or constructor overload resolution was ambiguous 

はなぜ?それはGCC4.6で動作しますか?おそらく

+2

は、なぜあなたはブースト::関数の代わりにはstd ::機能を使用していますか? –

+0

私のプロジェクトの依存ライブラリはboost :: functionを使用するためです。それはstd :: functionで動作しますか? – dizel3d

+0

あなたのコードをvc10でテストしましたが、代わりに 'std :: function'を使用しました。それはうまくコンパイルされます。だから、clang 3.2とgcc 4.6.2でコードを実行します。私はあなたの正確な問題にコメントすることはできませんので、便利なライブラリを持っていません。 HTH! – dirkgently

答えて

0

MSVCのバグ(エラーメッセージは非常に疑わしいと思われます)。これはGCC 4.7で動作します。

+0

decltype(f3)はOKです。それは 'int'ではなく、 'lambda0'です。 – dizel3d