12

数か月間保留されていたプロジェクトの作業を再開しました。前回コンパイルしたときは、エラーも警告もなく、問題なく動作していました。しかし、今日早くコンパイルしようとしたときに、この警告が表示されました

attention : ‘template<class _Operation> class std::binder2nd’ is deprecated [-Wdeprecated-declarations]

この警告は、プロジェクト全体で使用する Eigen/Geometry を含めると、文字通り何百回も表示されます。

In file included from [...]/include/Eigen/src/Core/ArrayBase.h:109:0,
                 from [...]/include/Eigen/Core:350,
                 from [...]/include/Eigen/Geometry:4,
                 from [...]/include/[myproject]/types.hh:8,
                 from [...]/include/[myproject]/voronoi.hh:8

それ以来、私は Eigen を更新していません (現在も最後の更新である 3.2.4 を使用しています)。ただし、前回コンパイルしてから、GCC は 5.1.0 に更新されています (archlinux を使用しています)。

質問:

  • std::binder2nd が非推奨であることを示す gcc 5.1.0 に関する問題はありますか
  • Eigen を更新する必要がありますか?
  • ビルドの冗長性を失うことなく、これらの特定の警告を黙らせるにはどうすればよいですか?

答え

std::bind2ndそれは本当に非推奨であり、Eigen でそれを解決するためにコミットが行われたことを認めます。ただし、このコミットはまだマスター ブランチとマージされていません :/ ( std::bind2ndEigen のコードにまだ存在するため、問題は解決しません)

要点: Eigen の最後の安定版は非推奨です

4

3 に答える 3

11
  • std::binder2nd が非推奨であることを示す gcc 5.1.0 に関する問題はありますか

いいえ、C++ 標準では C++11 では非推奨とされているため、C++11 モードでコンパイルすると非推奨となるはずです。

  • Eigen を更新する必要がありますか?

はい。std::bind2ndC++14以降はまったく存在しないため、C++17互換にしたい場合。

  • ビルドの冗長性を失うことなく、これらの特定の警告を黙らせるにはどうすればよいですか?

警告を抑制します。コマンドラインでコンパイルするか-Wno-deprecated-declarations、Eigen ヘッダーを含めるときにソースで実行します。

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#include <eigen/whatever.h>
#pragma GCC diagnostic pop

/usr/includeまたは、他の答えが言うように、Eigen ヘッダーをシステム ヘッダーとして扱うように GCC に指示-isystemします。

#pragma GCC system_header
#include <eigen/whatever.h>
于 2015-09-29T12:23:17.463 に答える