Когда я компилирую следующий код:
#include <boost/numeric/interval.hpp>
#include <complex>
int main(){
std::complex<boost::numeric::interval<double> > my_interval(1,1);
my_interval *= my_interval;
return 0;}
с использованием
g++ -std=c++14 main.cpp
или
clang++ -std=c++14 main.cpp
У меня два разных поведения. g ++ компилируется нормально, тогда как clang ++ не компилируется, потому что вызывает
std::enable_if<std::is_arithmetic<_A1>::value, bool>::type
отключить некоторые необходимые функции. Есть ли легкое исправление? Я что-то не так делаю?
Версия:
Полная и полная ошибка:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/complex:599:9: error:
no matching function for call to 'isnan'
if (isnan(__x) && isnan(__y))
^~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/complex:312:27: note:
in instantiation of function template specialization
'std::__1::operator*<boost::numeric::interval<double,
boost::numeric::interval_lib::policies<boost::numeric::interval_lib::rounded_math<double>,
boost::numeric::interval_lib::checking_strict<double> > > >' requested
here
*this = *this * complex(__c.real(), __c.imag());
^
main.cpp:6:15: note: in instantiation of function template specialization
'std::__1::complex<boost::numeric::interval<double,
boost::numeric::interval_lib::policies<boost::numeric::interval_lib::rounded_math<double>,
boost::numeric::interval_lib::checking_strict<double> > >
>::operator*=<boost::numeric::interval<double,
boost::numeric::interval_lib::policies<boost::numeric::interval_lib::rounded_math<double>,
boost::numeric::interval_lib::checking_strict<double> > > >' requested
here
my_interval *= my_interval;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:424:25: note:
candidate template ignored: disabled by 'enable_if' [with _A1 =
boost::numeric::interval<double,
boost::numeric::interval_lib::policies<boost::numeric::interval_lib::rounded_math<double>,
boost::numeric::interval_lib::checking_strict<double> > >]
typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type