Hi Michael (hi Kresimir, hi Julius, hi all ;-), you wrote:
> I have come across this problem before. The same problem occured when I > was working on .NET patches for boost::quaternion. So there's at least another boost library affected. > The following is from memory of VC7, so actual names may be slightly > different. I no longer have access to the MSVC compilers. Luck me!! :-) > If turn on compiler warning level 3 you should see warnings for line > such as "abs(1.5)" that a double is being converted to and integer. > If look in the <math.h> header you will see why All the C++ definitions > are in there. The problem is that many (includeing abs(float/double) are > NOT defined when the macro _MSC_EXTENSIONS is defined. This is for some > stupid backwards compatibilty with their previous broken headers!! > > To make things work, you must either > Use the compiler switch /Za to disable microsoft extensions. > OR use > #ifdef _MSC_EXTENSIONS > #undef _MSC_EXTENSIONS > #include <cmath> > #define _MSC_EXTENSIONS > #else > #include <cmath> > #endif > > I do not recommend /Za. The compiler has even more problems then normal > when it is set. VC7 cannot compile uBLAS and many other boost libraries > with /Za. This agrees with Julius' statements. > My long term solution was simply to edit <math.h> to remove the > offending conditional compilation! :-) > The is no specific solution in boost/config for this problem. I don't > see there is an easy fix either as _MSC_EXTENSIONS needs to be define > for some of MS own header files. OK. I've prepared the following patch for ublas: - Add the following to the MSVC section of ublas/config.hpp #ifdef _MSC_EXTENSIONS #define BOOST_UBLAS_NO_CMATH #endif - Change the problematic parts of ublas/traits.hpp to #if defined (BOOST_NO_STDC_NAMESPACE) || defined (BOOST_UBLAS_NO_CMATH) return ::fabsf (t); #else return std::abs (t); #endif I'll commit this later, if noone objects. Thanks, Joerg _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost