Hi,

On 04.01.2013 06:19, Pedro Giffuni wrote:
As title says the windows build got broken by my attempt to use boost::math in 
Calc. The linux buildbots are fine so it seems some interaction between MSVC 
and boost.

hdu@ kindly provided a log:
https://issues.apache.org/ooo/attachment.cgi?id=80094&action=edit

I am completely clueless and some expert help is welcome. I guess I will never 
get used to this: it is sad that the code was actually working great on UNIX 
but the Windows port is important so I will revert tomorrow (unless someone 
gets ahead of me).

I think I found the reason and an explanation of what has gone wrong:
- the stl/complex.h header gets included somehow
- it defines a function abs(complex<T>)
- on windows abs() usually comes from math.h
- so stlport<=4 on windows doesn't declare stl::abs(double) and the like
=> there is a problem if stl::abs(double) is needed
- the atanh(double) which depends on stl::abs() is thus considered a failure from C++'s SFINAE (Substitution Failure is not an Error) perspective and thus the needed template is not propagated to

In short: adding a
#define _STLP_HAS_NATIVE_FLOAT_ABS
before the #include<boost/math/special_functions/*> lines in interpr1.cxx and interpr3.cxx solves the problem, but it is of course too unclean, it just proves the point. To get things going again adding the define conditionally on the WNT target isn't too unreasonable.

Interestingly stlport 5.2 adds the define itself unconditionally also for Windows.

So in summary the problem was caused by our code base having quite an old stlport interacting with a quite new boost library and the resulting trouble being hidden by the SFINAE mechanism. Yay! Experiences like this or like issue 72248 are interesting reality checks, especially when discussing fancy template libraries with their enthusiasts.

Herbert

Reply via email to