我刚刚重新开始了一个搁置了几个月的项目。上次我编译它时它工作得很好,没有任何错误或警告。然而,当我今天早些时候尝试编译它时,我收到了这个警告
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)
问题:
- gcc 5.1.0 是否有问题告诉我 std::binder2nd 已弃用
- 应该更新 Eigen 吗?
- 如何在不丢失构建的冗长性的情况下使这些特定警告静音?
回答
我认为这std::bind2nd
确实已被弃用,并且已在 Eigen 中进行了提交以解决该问题。然而,这个提交还没有与主分支合并:/(并且没有解决问题,因为有些std::bind2nd
仍然存在于 Eigen 的代码中)
底线是:Eigen 的最后一个稳定版本已被弃用