1

些細な、スローしない、コピーコンストラクターを使用するタイプでstd :: mapを使用すると、xtree内の到達不能コードに対してコンパイラー警告/エラーがスローされます(警告レベル4、リリースモード)。これは、std :: mapにtry-catchが含まれているため、例外が発生した場合にツリーの状態を維持するのに役立ちますが、コンパイラは、格納されている要素が呼び出されない場合、catchステートメントが呼び出されないことを認識します。投げる。これらの警告は、.cppファイルの先頭にある次の行で簡単に抑制できます。

#pragma warning(push)
#pragma warning(disable:4702)
#include <xtree>
#pragma warning(pop)

警告レベルを変更したり、デバッグを組み込んだり、警告を抑制したり、マップで別のタイプを使用したりせずに、この警告/エラーを回避する方法はありますか?標準ライブラリでこれを変更する予定はありますか?

更新:
たぶんそれはコンパイラ固有です。私はvc7を使用しています。エラーは次のとおりです。

c:\ program files \ microsoft visual studio .net 2003 \ vc7 \ include \ xtree(1116):エラーC2220:警告はエラーとして扱われます-「オブジェクト」ファイルは生成されません
c:\ program files \ microsoft visual studio .net 2003 \ vc7 \ include \ xtree(1116):警告C4702:到達不能コード

どうやらxtreeはstd::mapによって使用されています。

4

1 に答える 1

1

残念ながら、これはVC7xtreeの基本的な実装の一部であるように見えmapます。そのため、それを軽減するためにできることはあまりありません。標準ライブラリのバグのようです。

新しいコンパイラを使用する可能性はありますか?使用できるコンパイラの最新バージョンが無料でダウンロードできると確信しています。おそらく、この問題は修正されています。

それがオプションでない場合、おそらく最善の解決策は、インクルードをmap独自のプライベートヘッダーにラップし、コメントと既に検出した#pragma+行を追加することです(インクルードに加えて。このようにして、回避策を通常の使用から隠します。 。include <xtree>map

于 2010-07-13T14:33:29.750 に答える