From 2b76f558c10fb965b2bad902f9d49a3fbb8b8c7c Mon Sep 17 00:00:00 2001 From: Antony Polukhin Date: Mon, 25 Jul 2011 05:02:07 +0000 Subject: [PATCH] #5732. Adds workaround for MinGW bugs [SVN r73347] --- include/boost/lexical_cast.hpp | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/include/boost/lexical_cast.hpp b/include/boost/lexical_cast.hpp index 5d85a5d..7874743 100644 --- a/include/boost/lexical_cast.hpp +++ b/include/boost/lexical_cast.hpp @@ -1147,21 +1147,42 @@ namespace boost bool shl_float(float val,wchar_t* out) { using namespace std; if (put_inf_nan(start,finish,val)) return true; - finish = start + swprintf(out,finish-start,L"%.*g", static_cast(boost::detail::lcast_get_precision()), val ); + finish = start + swprintf(out, +#ifndef __MINGW32__ + finish-start, +#endif + L"%.*g", static_cast(boost::detail::lcast_get_precision()), val ); + return finish > start; } + bool shl_double(double val,wchar_t* out) { using namespace std; if (put_inf_nan(start,finish,val)) return true; - finish = start + swprintf(out,finish-start,L"%.*lg", static_cast(boost::detail::lcast_get_precision()), val ); + /* __MINGW32__ is defined for both mingw.org and for mingw-w64. + * For mingw-w64, __MINGW64__ is defined, too, when targetting + * 64 bits. + * + * swprintf realization in MinGW does not conform to the ISO C + * Standard. + */ + finish = start + swprintf(out, +#ifndef __MINGW32__ + finish-start, +#endif + L"%.*lg", static_cast(boost::detail::lcast_get_precision()), val ); return finish > start; } bool shl_long_double(long double val,wchar_t* out) { using namespace std; if (put_inf_nan(start,finish,val)) return true; - finish = start + swprintf(out,finish-start,L"%.*Lg", static_cast(boost::detail::lcast_get_precision()), val ); + finish = start + swprintf(out, +#ifndef __MINGW32__ + finish-start, +#endif + L"%.*Lg", static_cast(boost::detail::lcast_get_precision()), val ); return finish > start; } #endif