Boost logo

Boost Users :

From: Alex.Durie (alex.durie_at_[hidden])
Date: 2020-02-03 21:33:13

I have written a short program utilising boost::float128 together with tux Eigen which successfully compiles and runs using g++, however it fails when I use icc.
The compiler error is

/home/alex/boost/boost_1_71_0/boost/multiprecision/float128.hpp(727): error: no suitable constructor exists to convert from "const _Quad" to "boost::multiprecision::number<boost::multiprecision::backends::float128_backend, boost::multiprecision::et_off>"
     static number_type (min)() BOOST_NOEXCEPT { return BOOST_MP_QUAD_MIN; }
How can I resolve this?

My example code is;
#include <iostream>
#include <cmath>
#include <Eigen/Dense>
#include <Eigen/Eigenvalues>
#include <iomanip>
#include <boost/cstdfloat.hpp>
#include <boost/multiprecision/float128.hpp>
#include <boost/math/special_functions.hpp>
#include <boost/math/constants/constants.hpp>
#include <quadmath.h>

using namespace Eigen;
using namespace std;

int main(){
  typedef Matrix<complex<boost::multiprecision::float128>, Dynamic, Dynamic> MatrixXcmp;
  MatrixXcmp C = MatrixXcmp::Random(8,8);
  ComplexEigenSolver<MatrixXcmp> ces;
  return 0;

It only fails compilation when I put in the line 'ces.compute(C);'.

I compile with
icpc quadtest.cpp -std=c++14 -Qoption,cpp,--extended_float_type -O2 -DMKL_LP64 -lmkl_intel_lp64 -fp-model precise -lmkl_sequential -lmkl_core -lpthread -lm -ldl -lquadmath

Many thanks in advance,


Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at