Sigh. Yeah, I've researched a bit why that happens.

The story is this:

glibc wanted to have isinf work with double AND float etc without conversion. 
Therefore, there is a special gcc construct where you can find out what type a 
parameter is IN A MACRO. Therefore, in C, isnan is a macro and so is isinf. The 
include file defining it is <math.h>

However, in C++ there's a include file <cmath>. This one provides normal 
functions in the namespace "std" (since overloads are possible in C++).

dmd2 undefs isinf which is why the C version doesn't work anymore (that's 
stupid, really. What were they thinking?). But then they dont use the namespace 
std so it won't use that one either. "::isinf" is DEFINITELY wrong - no idea 
how that ever worked. It won't find the macro that way AND it won't find the 
function in namespace std either (since <nothing>:: definitely says you want 
the one without namespace).

Some LLVM versions include <cmath> somewhere in their header files - so dmd2 is 
forced to use cmath rather than math.h even though they *want* to use math.h 
and the source code says so.

Therefore, I now use the C++ std::isinf - I hope LLVM won't change their mind 
again because then it will break again.

Reply via email to