Search code examples
c++11eigenintel-mkleigen3

EIGEN library with MKL rvalue references warning


I am trying to the use the EIGEN library linked with the MKL library (icc version 17.0.4) with the code:

#define EIGEN_USE_MKL_ALL
#define lapack_complex_float std::complex<float>
#define lapack_complex_double std::complex<double>

#include <iostream>
#include <Eigen/Dense>
#include <Eigen/Eigenvalues>
#include <complex>
#include <Eigen/PardisoSupport>

using namespace Eigen;
using Eigen::MatrixXd;

int main()
{
    int size = 3;
    MatrixXd A(size,size);
    A(0,0)=1.0;        A(0,1)=-0.5;         A(0,2)=0.2;
    A(1,0)=0.7;        A(1,1)=-1.3;        A(1,2)=-2.0;
    A(2,0)=0.7;        A(2,1)=-1.3;        A(2,2)=-2.0;

    std::cout << A << std::endl;
    VectorXd vec(3);
    vec(0) = 2;        
    vec(1) = 3;        
    vec(2) = 4;

    std::cout << A*vec << "\n";

    std::cout << A.eigenvalues() << "\n";

}

I compile via

icc -I${MKLROOT}/include -L${MKLROOT}/lib -Wl,-rpath,${MKLROOT}/lib \
    -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl \
    -L/Users/user/eigen -I/Users/user/eigen

However I receive the error message:

/Users/user/eigen/Eigen/src/Core/DenseStorage.h(372): warning #3495: rvalue references 
are a C++11 feature DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT

How to solve this warning?


Solution

  • Eigen seems to detect that your compiler supports rvalue references. You can either disable that by defining -DEIGEN_HAS_RVALUE_REFERENCES=0 via the command line or before including Eigen in your source by:

    #define EIGEN_HAS_RVALUE_REFERENCES 0
    

    Preferably, tell icc that it shall compile with C++11 support (I assume -std=c++11 works for icc as well).