C++ 从GCC 5.4升级到GCC 7.2后,带有Eigen 3.3.4的警告
当我使用GCC5.4使用C++ 从GCC 5.4升级到GCC 7.2后,带有Eigen 3.3.4的警告,c++,gcc,eigen,eigen3,C++,Gcc,Eigen,Eigen3,当我使用GCC5.4使用-Wall-Werror编译代码时,它运行良好。当我使用GCC 7.2(作为本机编译器从源代码构建)进行尝试时,它给出了以下内容: error: enum constant in boolean context [-Werror=int-in-bool-context] MayLinearVectorize = bool(MightVectorize) && MayLinearize && DstHasDirectAccess 再现问题
-Wall-Werror
编译代码时,它运行良好。当我使用GCC 7.2(作为本机编译器从源代码构建)进行尝试时,它给出了以下内容:
error: enum constant in boolean context [-Werror=int-in-bool-context]
MayLinearVectorize = bool(MightVectorize) && MayLinearize && DstHasDirectAccess
再现问题的一个小示例:
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
Matrix<double,Dynamic,1> v = Matrix<double,Dynamic,1>::Constant(5, 1);
return 0;
}
#包括
使用名称空间特征;
int main()
{
矩阵v=矩阵::常数(5,1);
返回0;
}
使用g++7 eigtrival.cpp-I$EIGEN_DIR-Wall-Werror编译
如果我在没有
-Werror
的情况下尝试,我会收到警告,但它会编译,并且我的所有(少数)测试都通过了-据我所知,这很好。但是,我希望保持所有警告和-Werror
处于启用状态。有人能解释一下吗?正如盖尔所说,这个问题已经解决了,但还没有正式公布。从Mercurial存储库(目前版本为3.3.90)克隆并在我的代码中使用该版本修复了该问题。警告出现在Eigen中,不是吗?你应该向bugzilla报告这个问题。。。解决方法:使用#pragma GCC diagnostic ignored
这在3.3和devel分支中早已修复,但我昨天刚从下载页面下载了一份新副本。更新:这在3.3.5及更高版本中已修复。