Currently MSVC STL builds Boost.Math into its static library, which cause the static library contains non-_Uglified linking symbols and causes non-conforming linking behavior. See microsoft/STL#362.
I'm trying to resolve this in Boost.Math by adding the BOOST_MATH_NAMESPACE macro
#ifndef BOOST_MATH_NAMESPACE
#define BOOST_MATH_NAMESPACE math
#endif
and then replace every occurrence of math which is a namespace with BOOST_MATH_NAMESPACE.
With the changes above, MSVC STL's special_math.cpp can define BOOST_MATH_NAMESPACE as _Math (or some other _Uglified identifier, e.g. __math__) before including <boost/math/*> and then use ::boost::BOOST_MATH_NAMESPACE::* to get rid of non-_Uglified symbols.
But the changes need to touch 500+ files in Boost.Math and make maintenance a bit harder (every namespace math should be spelt as BOOST_MATH_NAMESPACE later). Not sure whether this approach is OK.
Currently MSVC STL builds Boost.Math into its static library, which cause the static library contains non-_Uglified linking symbols and causes non-conforming linking behavior. See microsoft/STL#362.
I'm trying to resolve this in Boost.Math by adding the
BOOST_MATH_NAMESPACEmacroand then replace every occurrence of
mathwhich is a namespace withBOOST_MATH_NAMESPACE.With the changes above, MSVC STL's
special_math.cppcan defineBOOST_MATH_NAMESPACEas_Math(or some other _Uglified identifier, e.g.__math__) before including<boost/math/*>and then use::boost::BOOST_MATH_NAMESPACE::*to get rid of non-_Uglified symbols.But the changes need to touch 500+ files in Boost.Math and make maintenance a bit harder (every namespace
mathshould be spelt asBOOST_MATH_NAMESPACElater). Not sure whether this approach is OK.