Andrew Straw <str...@as...> writes: > extern "C" { > int isnan(double); > } > >>Apparently, the upshot is that isnan is a C99 feature and C++ does not >>incorporate C99. >> > So, does that mean the above should work on most C++ compilers? (Do > they implement C99 mode when in extern "C" mode?) What extern "C" does is it disables the C++ name-mangling so you can refer to C functions. The presence of isnan is a header/library issue, and apparently the cmath header file in some systems makes sure to hide isnan. It seems that C99 defines an isnan _macro_, and the above is assuming that an isnan _function_ exists in the library. The isnan manual page on OS X states: | HISTORY | 3BSD introduced isinf() and isnan() functions, which accepted double | arguments; these have been superseded by the macros described above. I don't know how widespread these functions are. GNU libc and OS X have them, and all the world's either Linux or a Mac, right? :-) I think we could use the system's isnan macro in a fairly clean way by performing the following dance (untested, and I don't have an OS X 10.3 system to test on): #include <math.h> template<typename T> int mpl_isnan(T arg) { return isnan(arg); } #include <cmath> Is it possible in distutils to do autoconf-style compilation tests at configuration time? -- Jouni