C++ 带特征张量示例的编译器警告

C++ 带特征张量示例的编译器警告,c++,eigen3,C++,Eigen3,我正在用不受支持的本征张量库做一些实验。在文档中,有一个小示例显示如何调整张量对象的大小: Tensor<float, 3> t_3d(2, 3, 4); t_3d = Tensor<float, 3>(3, 4, 3); 张量t_-3d(2,3,4); t_3d=张量(3,4,3); 当我编译一个main()时,它基本上由这两行组成,我从编译器那里得到了一大堆废话: In file included from /usr/local/include/eigen3/un

我正在用不受支持的本征张量库做一些实验。在文档中,有一个小示例显示如何调整张量对象的大小:

Tensor<float, 3> t_3d(2, 3, 4);
t_3d = Tensor<float, 3>(3, 4, 3);
张量t_-3d(2,3,4);
t_3d=张量(3,4,3);
当我编译一个main()时,它基本上由这两行组成,我从编译器那里得到了一大堆废话:

In file included from /usr/local/include/eigen3/unsupported/Eigen/CXX11/Tensor:88:0,
                 from tensor_test.cpp:6:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h: In instantiation of ‘struct Eigen::TensorEvaluator<const Eigen::Tensor<float, 3>, Eigen::DefaultDevice>’:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h:96:70:   required from ‘struct Eigen::TensorEvaluator<const Eigen::TensorAssignOp<Eigen::Tensor<float, 3>, const Eigen::Tensor<float, 3> >, Eigen::DefaultDevice>’
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h:406:14:   required from ‘Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType>& Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType>::operator=(const Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType>&) [with Scalar_ = float; int NumIndices_ = 3; int Options_ = 0; IndexType_ = long int]’
tensor_test.cpp:29:36:   required from here
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h:156:71: warning: ignoring attributes on template argument ‘Eigen::PacketType<float, Eigen::DefaultDevice>::type {aka __vector(4) float}’ [-Wignored-attributes]
     PacketAccess = (internal::unpacket_traits<PacketReturnType>::size > 1),
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h: In instantiation of ‘struct Eigen::TensorEvaluator<Eigen::Tensor<float, 3>, Eigen::DefaultDevice>’:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h:100:65:   required from ‘struct Eigen::TensorEvaluator<const Eigen::TensorAssignOp<Eigen::Tensor<float, 3>, const Eigen::Tensor<float, 3> >, Eigen::DefaultDevice>’
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h:406:14:   required from ‘Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType>& Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType>::operator=(const Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType>&) [with Scalar_ = float; int NumIndices_ = 3; int Options_ = 0; IndexType_ = long int]’
tensor_test.cpp:29:36:   required from here
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h:42:71: warning: ignoring attributes on template argument ‘Eigen::PacketType<float, Eigen::DefaultDevice>::type {aka __vector(4) float}’ [-Wignored-attributes]
     PacketAccess = (internal::unpacket_traits<PacketReturnType>::size > 1),
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
In file included from /usr/local/include/eigen3/unsupported/Eigen/CXX11/Tensor:121:0,
                 from tensor_test.cpp:6:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h: In instantiation of ‘static void Eigen::internal::TensorExecutor<Expression, Eigen::DefaultDevice, true>::run(const Expression&, const Eigen::DefaultDevice&) [with Expression = const Eigen::TensorAssignOp<Eigen::Tensor<float, 3>, const Eigen::Tensor<float, 3> >]’:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h:407:65:   required from ‘Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType>& Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType>::operator=(const Eigen::Tensor<Scalar_, NumIndices_, Options_, IndexType>&) [with Scalar_ = float; int NumIndices_ = 3; int Options_ = 0; IndexType_ = long int]’
tensor_test.cpp:29:36:   required from here
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h:61:17: warning: ignoring attributes on template argument ‘Eigen::TensorEvaluator<const Eigen::TensorAssignOp<Eigen::Tensor<float, 3>, const Eigen::Tensor<float, 3> >, Eigen::DefaultDevice>::PacketReturnType {aka __vector(4) float}’ [-Wignored-attributes]
       const int PacketSize = unpacket_traits<typename TensorEvaluator<Expression, DefaultDevice>::PacketReturnType>::size;
在/usr/local/include/eigen3/unsupported/Eigen/CXX11/Tensor:88:0中包含的文件中,
来自张量_检验。cpp:6:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h:在“struct-Eigen::TensorEvaluator”的实例化中:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h:96:70:必须来自“结构特征::TensorEvaluator”
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h:406:14:必须来自“Eigen::Tensor&Eigen::Tensor::operator=(const-Eigen::Tensor&)[带标量=float;int-NumIndices=3;int-Options=0;IndexType=long-int]”
张量测试。cpp:29:36:从这里开始需要
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h:156:71:警告:忽略模板参数'Eigen::PacketType::type{aka__vector(4)float}'[-Wignored attributes]上的属性
PacketAccess=(内部::解包特征::大小>1),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h:在“struct-Eigen::TensorEvaluator”的实例化中:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h:100:65:必须来自“struct Eigen::TensorEvaluator”
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h:406:14:必须来自“Eigen::Tensor&Eigen::Tensor::operator=(const-Eigen::Tensor&)[带标量=float;int-NumIndices=3;int-Options=0;IndexType=long-int]”
张量测试。cpp:29:36:从这里开始需要
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h:42:71:警告:忽略模板参数'Eigen::PacketType::type{aka__vector(4)float}'[-Wignored attributes]上的属性
PacketAccess=(内部::解包特征::大小>1),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
在/usr/local/include/eigen3/unsupported/Eigen/cx11/Tensor:121:0中包含的文件中,
来自张量_检验。cpp:6:
/usr/local/include/eigen3/unsupported/Eigen/cx11/src/Tensor/TensorExecutor.h:在“static void Eigen::internal::TensorExecutor::run(const Expression&,const Eigen::DefaultDevice&)[with Expression=const Eigen::TensorAssignOp]的实例化中:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h:407:65:必须来自“Eigen::Tensor&Eigen::Tensor::operator=(const-Eigen::Tensor&)[带标量=float;int-NumIndices=3;int-Options=0;IndexType=long-int]]
张量测试。cpp:29:36:从这里开始需要
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h:61:17:警告:忽略模板参数“Eigen::TensorEvaluator::PacketReturnType{aka__向量(4)float}”[-Wignored属性]
const int PacketSize=unpacket_traits::size;
我可以添加一个填充张量的小代码,然后打印出内容,然后一切都按预期进行:

for (auto ii = 0; ii < 3; ii++) {
    for (auto jj = 0; jj < 4; jj++) {
        for (auto kk = 0; kk < 3; kk++) {
            t_3d(kk, jj, ii) = val++;
        }
    }
}
for (auto ii = 0; ii < 3; ii++) {
    for (auto jj = 0; jj < 4; jj++) {
        for (auto kk = 0; kk < 3; kk++) {
            std::cout << t_3d(kk, jj, ii) << std::endl;
        }
    }
}
用于(自动ii=0;ii<3;ii++){ 用于(自动jj=0;jj<4;jj++){ 用于(自动kk=0;kk<3;kk++){ t_3d(kk,jj,ii)=val++; } } } 用于(自动ii=0;ii<3;ii++){ 用于(自动jj=0;jj<4;jj++){ 用于(自动kk=0;kk<3;kk++){
std::cout我能够使用g++的
-isystem
选项关闭来自
不支持的/Eigen/CXX11/src/Tensor
的警告


我使用的是
gcc版本7.4.0
Eigen版本3.3.7(323c052e1731)

我很久以前就放弃了压制eigen的警告。它会让人感到温暖。只要它还在做你想做的事情,就忽略它。@Jeffrey我可能会这么做。我还发现boost是一个丰富的笨拙编译器消息源……你使用的是eigen的最新开发版本吗?如果你是,并且你遇到了这些警告,你会记录一个bug报告(同时说明您正在使用的编译器和编译标志)。如果您不关心修复警告,请通过
-isystem
而不是
-I
(如果您使用g++或clang++)包含Eigen。无法使用我拥有的任何clang或gcc版本复制。您使用的是什么Egeng版本?什么编译标志?我使用的是Egeng 3.3.1和gcc 7.3.0。我还尝试了Egeng 3.3.5和3.3.7,得到了相同的消息。编译标志:-g-I/usr/local/include/Egen3-std=c++14