EigenBase<Derived>::Index not Integer? Error in msvc: C2338: FLOATING_POINT_ARGUMENT_PASSED__INTEGER_WAS_EXPECTED

Submitted by Pablo Hernández

Assigned to Nobody

Link to original bugzilla bug (#1761)
Version: 3.3 (current stable)
Operating system: Windows

Description

After updating the internal Eigen used in ITK to the top of branch 3.3, we are getting a compiler error related to Eigen, but only in msvc modern versions (reproduced at least in VS2019 version 16.3.3).

I wonder if you have faced this error before, or if you have any idea about the changes in Eigen (or msvc?) that might have generated this.

The PR where the error triggered: https://github.com/InsightSoftwareConsortium/ITK/pull/1297

And the error itself, in the Eigen side.
EigenBase<Derived>::Index here seems integer type, not float, right? I do not comprehend. I do not understand how it only fails on msvc. Any hint is welcome.

Eigen\src/Core/PlainObjectBase.h(742,1): error C2338: FLOATING_POINT_ARGUMENT_PASSED__INTEGER_WAS_EXPECTED  
Eigen\src/Core/Matrix.h(302): message : see reference to function template instantiation 'void itkeigen::PlainObjectBase<itkeigen::Matrix<double,3,3,0,3,3>>::_init2<T0,T1>(itkeigen::EigenBase<Derived>::Index,itkeigen::EigenBase<Derived>::Index,__int64 *)' being compiled  
Eigen\src/Core/Matrix.h(302): message :         with  
Eigen\src/Core/Matrix.h(302): message :         [  
Eigen\src/Core/Matrix.h(302): message :             T0=itkeigen::EigenBase<itkeigen::Matrix<ValueType,3,3,1,3,3>>::Index,  
Eigen\src/Core/Matrix.h(302): message :             T1=itkeigen::EigenBase<itkeigen::Matrix<ValueType,3,3,1,3,3>>::Index,  
Eigen\src/Core/Matrix.h(302): message :             Derived=itkeigen::Matrix<double,3,3,0,3,3>  
Eigen\src/Core/Matrix.h(302): message :         ]  
Eigen\src/Core/Matrix.h(302): message : see reference to function template instantiation 'void itkeigen::PlainObjectBase<itkeigen::Matrix<double,3,3,0,3,3>>::_init2<T0,T1>(itkeigen::EigenBase<Derived>::Index,itkeigen::EigenBase<Derived>::Index,__int64 *)' being compiled  
Eigen\src/Core/Matrix.h(302): message :         with  
Eigen\src/Core/Matrix.h(302): message :         [  
Eigen\src/Core/Matrix.h(302): message :             T0=itkeigen::EigenBase<itkeigen::Matrix<ValueType,3,3,1,3,3>>::Index,  
Eigen\src/Core/Matrix.h(302): message :             T1=itkeigen::EigenBase<itkeigen::Matrix<ValueType,3,3,1,3,3>>::Index,  
Eigen\src/Core/Matrix.h(302): message :             Derived=itkeigen::Matrix<double,3,3,0,3,3>  
Eigen\src/Core/Matrix.h(302): message :         ]  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(167): message : see reference to function template instantiation 'itkeigen::Matrix<double,3,3,0,3,3>::Matrix<itkeigen::EigenBase<Derived>::Index,itkeigen::EigenBase<Derived>::Index>(const T0 &,const T1 &)' being compiled  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(167): message :         with  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(167): message :         [  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(167): message :             Derived=itkeigen::Matrix<ValueType,3,3,1,3,3>,  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(167): message :             T0=itkeigen::EigenBase<itkeigen::Matrix<ValueType,3,3,1,3,3>>::Index,  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(167): message :             T1=itkeigen::EigenBase<itkeigen::Matrix<ValueType,3,3,1,3,3>>::Index  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(167): message :         ]  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(163): message : see reference to function template instantiation 'itkeigen::Matrix<double,3,3,0,3,3>::Matrix<itkeigen::EigenBase<Derived>::Index,itkeigen::EigenBase<Derived>::Index>(const T0 &,const T1 &)' being compiled  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(163): message :         with  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(163): message :         [  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(163): message :             Derived=itkeigen::Matrix<ValueType,3,3,1,3,3>,  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(163): message :             T0=itkeigen::EigenBase<itkeigen::Matrix<ValueType,3,3,1,3,3>>::Index,  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(163): message :             T1=itkeigen::EigenBase<itkeigen::Matrix<ValueType,3,3,1,3,3>>::Index  
Eigen\src/Eigenvalues/SelfAdjointEigenSolver.h(163): message :         ]  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(951): message : see reference to function template instantiation 'itkeigen::SelfAdjointEigenSolver<EigenLibMatrixType>::SelfAdjointEigenSolver<Derived>(const itkeigen::EigenBase<Derived> &,int)' being compiled  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(951): message :         with  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(951): message :         [  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(951): message :             Derived=itkeigen::Matrix<ValueType,3,3,1,3,3>  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(951): message :         ]  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(951): message : see reference to function template instantiation 'itkeigen::SelfAdjointEigenSolver<EigenLibMatrixType>::SelfAdjointEigenSolver<Derived>(const itkeigen::EigenBase<Derived> &,int)' being compiled  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(951): message :         with  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(951): message :         [  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(951): message :             Derived=itkeigen::Matrix<ValueType,3,3,1,3,3>  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(951): message :         ]  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message : see reference to function template instantiation 'unsigned int itk::SymmetricEigenAnalysisFixedDimension<3,itk::Matrix<itk::SpacePrecisionType,3,3>,itk::FixedArray<T,3>,itk::Matrix<T,3,3>>::ComputeEigenValuesAndVectorsWithEigenLibraryImpl<TMatrix>(const QMatrix &,TVector &,TEigenMatrix &,long) const' being compiled  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :         with  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :         [  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :             T=double,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :             TMatrix=itk::Matrix<itk::SpacePrecisionType,3,3>,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :             QMatrix=itk::Matrix<itk::SpacePrecisionType,3,3>,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :             TVector=itk::FixedArray<double,3>,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :             TEigenMatrix=itk::Matrix<itk::SpacePrecisionType,3,3>  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :         ]  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message : see reference to function template instantiation 'unsigned int itk::SymmetricEigenAnalysisFixedDimension<3,itk::Matrix<itk::SpacePrecisionType,3,3>,itk::FixedArray<T,3>,itk::Matrix<T,3,3>>::ComputeEigenValuesAndVectorsWithEigenLibraryImpl<TMatrix>(const QMatrix &,TVector &,TEigenMatrix &,long) const' being compiled  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :         with  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :         [  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :             T=double,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :             TMatrix=itk::Matrix<itk::SpacePrecisionType,3,3>,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :             QMatrix=itk::Matrix<itk::SpacePrecisionType,3,3>,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :             TVector=itk::FixedArray<double,3>,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :             TEigenMatrix=itk::Matrix<itk::SpacePrecisionType,3,3>  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(789): message :         ]  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(788): message : while compiling class template member function 'unsigned int itk::SymmetricEigenAnalysisFixedDimension<3,itk::Matrix<itk::SpacePrecisionType,3,3>,itk::FixedArray<T,3>,itk::Matrix<T,3,3>>::ComputeEigenValuesAndVectors(const TMatrix &,TVector &,TEigenMatrix &) const'  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(788): message :         with  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(788): message :         [  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(788): message :             T=double,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(788): message :             TMatrix=itk::Matrix<itk::SpacePrecisionType,3,3>,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(788): message :             TVector=itk::FixedArray<double,3>,  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(788): message :             TEigenMatrix=itk::Matrix<itk::SpacePrecisionType,3,3>  
Modules\Core\Common\include\itkSymmetricEigenAnalysis.h(788): message :         ]  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(295): message : see reference to function template instantiation 'unsigned int itk::SymmetricEigenAnalysisFixedDimension<3,itk::Matrix<itk::SpacePrecisionType,3,3>,itk::FixedArray<T,3>,itk::Matrix<T,3,3>>::ComputeEigenValuesAndVectors(const TMatrix &,TVector &,TEigenMatrix &) const' being compiled  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(295): message :         with  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(295): message :         [  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(295): message :             T=double,  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(295): message :             TMatrix=itk::Matrix<itk::SpacePrecisionType,3,3>,  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(295): message :             TVector=itk::FixedArray<double,3>,  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(295): message :             TEigenMatrix=itk::Matrix<itk::SpacePrecisionType,3,3>  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(295): message :         ]  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(259): message : see reference to class template instantiation 'itk::SymmetricEigenAnalysisFixedDimension<3,itk::Matrix<itk::SpacePrecisionType,3,3>,itk::FixedArray<T,3>,itk::Matrix<T,3,3>>' being compiled  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(259): message :         with  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(259): message :         [  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(259): message :             T=double  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(259): message :         ]  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(258): message : while compiling class template member function 'void itk::SymmetricSecondRankTensor<double,3>::ComputeEigenValues(itk::FixedArray<T,3> &) const'  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(258): message :         with  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(258): message :         [  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(258): message :             T=double  
Modules\Core\Common\include\itkSymmetricSecondRankTensor.hxx(258): message :         ]  
Modules\Core\Common\test\itkSymmetricSecondRankTensorTest.cxx(227): message : see reference to function template instantiation 'void itk::SymmetricSecondRankTensor<double,3>::ComputeEigenValues(itk::FixedArray<T,3> &) const' being compiled  
Modules\Core\Common\test\itkSymmetricSecondRankTensorTest.cxx(227): message :         with  
Modules\Core\Common\test\itkSymmetricSecondRankTensorTest.cxx(227): message :         [  
Modules\Core\Common\test\itkSymmetricSecondRankTensorTest.cxx(227): message :             T=double  
Modules\Core\Common\test\itkSymmetricSecondRankTensorTest.cxx(227): message :         ]  
Modules\Core\Common\test\itkSymmetricSecondRankTensorTest.cxx(202): message : see reference to class template instantiation 'itk::SymmetricSecondRankTensor<double,3>' being compiled  
Edited Dec 05, 2019 by Eigen Bugzilla
Assignee Loading
Time tracking Loading