Linuxで正常にコンパイルされるコードがいくつかありますが、それをWindowsに移植しようとしています。BoostProのBoost1.50プリコンパイル済みバイナリを使用しましたが、コードをコンパイルすると、次の不可解なエラーが発生します。
error C2664: 'boost::_bi::bind_t<R,F,L>::bind_t(const boost::_bi::bind_t<R,F,L> &)' :
cannot convert parameter 1 from 'boost::_bi::bind_t<R,F,L>'
to 'const boost::_bi::bind_t<R,F,L> &'
C:\Program Files (x86)\boost\boost_1_50\boost\bind\bind_cc.hpp [line] 50
このエラーは、Boostヘッダーファイルの奥深くに表示され、コードのどこに問題があるのかがわからないため、最も役に立ちません。それにもかかわらず、コードのさまざまなブロックをコメントアウトすることにより、原因としてこれに絞り込みました。
void test(int a)
throw (int) // removing this line makes it compile
{
return;
}
...
boost::function<void(int)> fn = boost::bind<void>(test, _1);
throw
関数定義で指定子を削除すると機能します。それがクラスであろうと単なる。であろうと、私が何を投げるかは関係ありませんint
。私は何か間違ったことをしていますか、それともVisual C ++で例外をスローする関数にバインドできませんか?Boost Bindのドキュメントはこれに関する問題を示唆していないようであり、GCCはどちらの方法でも問題を抱えていません。
[補足:上記のコードは私の実際のコードではありませんが、コンパイルすると同じ問題が発生します。誰かが問題を再現したい場合の些細な例にすぎないので、intを投げるのが悪いなどについてのコメントは避けてください。]