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 by Eigen Bugzilla