2013-01-14 15 views
7

でエラーをコンパイルし、私は、次のブースト信号S2コードでのVisual Studio 2012 Ultimateを使用しています:https://github.com/cfobel/boost_signals2/blob/master/hello_world_0.cpp では次のエラーを生成します。のVisual Studio 2012 C++ブーストSignal2信号

c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory(348): error C4996: 'std::_Uninitialized_copy0': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory(333) : see declaration of 'std::_Uninitialized_copy0' 
1>   c:\libraries\boost_1_52_0\boost\signals2\detail\auto_buffer.hpp(192) : see reference to function template instantiation '_FwdIt std::uninitialized_copy<I,boost::variant<T0_,T1>*>(_InIt,_InIt,_FwdIt)' being compiled 

は、Visual Studio用の互換性がない、このコードです2012 C++?それはまだ使用するのが安全ですか?最後に、どのように変更を提案するのですか? ありがとう

答えて

9

C4996は廃止予定とマークされた機能の使用に関する警告です。エラーとして表示されているので、おそらくTreat Warning as Error (/WX)オプションが有効になっていますか?

これを無効にする方法は、エラーメッセージ自体に記載されています。 _SCL_SECURE_NO_WARNINGSシンボルをプロジェクトのプリプロセッサ定義に追加します。

+3

非常に有益な答えですが、触れていない*「まだ安全ですか?」*。言い換えれば、boost :: signals2はこの警告の原因となり、人々はそれを心配すべきでしょうか? – sgryzko

+1

@sgryzko一般的な答えはありません*安全です*、それは問題のコードに依存します。コードにバッファオーバーフローの原因となるバグがありますか?はいの場合は、MSVCの機能が優れている可能性があります。いいえの場合、 'std :: uninitialized_copy'は絶対に安全です。 MSVCは 'std :: copy'(' std :: _ Copy_s'を使うことを望みます)のようなものについても文句を言うので、これらの警告は複数のコンパイラでコンパイルできるようにするコードで避けるのは不可能です。 – Praetorian

+0

@sgryzkoとHeavy-Rocker-Dude ...この問題を解決した人はいますか?私は今同じ問題を抱えています:私はVS2010プロジェクトをVS2013にboost :: signalsを使って変換しました。この警告はどこにでも出現しています。私は警告をオフにしたくない...コードを適切にコンパイルして無防備にしたい。何か案は?あらかじめThx。 –

関連する問題