$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r83537 - in trunk/boost/math: constants special_functions/detail tools
From: john_at_[hidden]
Date: 2013-03-24 08:01:59
Author: johnmaddock
Date: 2013-03-24 08:01:58 EDT (Sun, 24 Mar 2013)
New Revision: 83537
URL: http://svn.boost.org/trac/boost/changeset/83537
Log:
Make use of lexical_cast (and hence multiprecision support) dependent on there being an iostreams lib.  Should allow use on embedded platforms, especially WinCE.
Fixes #8327.
Text files modified: 
   trunk/boost/math/constants/constants.hpp                          |     7 +++++++                                 
   trunk/boost/math/special_functions/detail/unchecked_factorial.hpp |    20 ++++++++++++++++++++                    
   trunk/boost/math/tools/big_constant.hpp                           |     4 ++++                                    
   trunk/boost/math/tools/config.hpp                                 |     6 ++++++                                  
   4 files changed, 37 insertions(+), 0 deletions(-)
Modified: trunk/boost/math/constants/constants.hpp
==============================================================================
--- trunk/boost/math/constants/constants.hpp	(original)
+++ trunk/boost/math/constants/constants.hpp	2013-03-24 08:01:58 EDT (Sun, 24 Mar 2013)
@@ -14,7 +14,9 @@
 #pragma warning(push)
 #pragma warning(disable: 4127 4701)
 #endif
+#ifndef BOOST_MATH_NO_LEXICAL_CAST
 #include <boost/lexical_cast.hpp>
+#endif
 #ifdef BOOST_MSVC
 #pragma warning(pop)
 #endif
@@ -124,7 +126,12 @@
       template <class Real>
       Real convert_from_string(const char* p, const mpl::false_&)
       {
+#ifdef BOOST_MATH_NO_LEXICAL_CAST
+         // This function should not compile, we don't have the necesary functionality to support it:
+         BOOST_STATIC_ASSERT(sizeof(Real) == 0);
+#else
          return boost::lexical_cast<Real>(p);
+#endif
       }
       template <class Real>
       const char* convert_from_string(const char* p, const mpl::true_&)
Modified: trunk/boost/math/special_functions/detail/unchecked_factorial.hpp
==============================================================================
--- trunk/boost/math/special_functions/detail/unchecked_factorial.hpp	(original)
+++ trunk/boost/math/special_functions/detail/unchecked_factorial.hpp	2013-03-24 08:01:58 EDT (Sun, 24 Mar 2013)
@@ -15,7 +15,9 @@
 #pragma warning(push) // Temporary until lexical cast fixed.
 #pragma warning(disable: 4127 4701)
 #endif
+#ifndef BOOST_MATH_NO_LEXICAL_CAST
 #include <boost/lexical_cast.hpp>
+#endif
 #ifdef BOOST_MSVC
 #pragma warning(pop)
 #endif
@@ -279,6 +281,8 @@
       value = ::boost::math::max_factorial<long double>::value);
 };
 
+#ifndef BOOST_MATH_NO_LEXICAL_CAST
+
 template <class T>
 inline T unchecked_factorial(unsigned i BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(T))
 {
@@ -403,6 +407,22 @@
    BOOST_STATIC_CONSTANT(unsigned, value = 100);
 };
 
+#else // BOOST_MATH_NO_LEXICAL_CAST
+
+template <class T>
+inline T unchecked_factorial(unsigned i BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(T))
+{
+   return 1;
+}
+
+template <class T>
+struct max_factorial
+{
+   BOOST_STATIC_CONSTANT(unsigned, value = 0);
+};
+
+#endif
+
 #ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
 template <class T>
 const unsigned max_factorial<T>::value;
Modified: trunk/boost/math/tools/big_constant.hpp
==============================================================================
--- trunk/boost/math/tools/big_constant.hpp	(original)
+++ trunk/boost/math/tools/big_constant.hpp	2013-03-24 08:01:58 EDT (Sun, 24 Mar 2013)
@@ -8,7 +8,9 @@
 #define BOOST_MATH_TOOLS_BIG_CONSTANT_HPP
 
 #include <boost/math/tools/config.hpp>
+#ifndef BOOST_MATH_NO_LEXICAL_CAST
 #include <boost/lexical_cast.hpp>
+#endif
 #include <boost/type_traits/is_convertible.hpp>
 
 namespace boost{ namespace math{ 
@@ -25,11 +27,13 @@
 {
    return static_cast<T>(v);
 }
+#ifndef BOOST_MATH_NO_LEXICAL_CAST
 template <class T>
 inline T make_big_value(long double, const char* s, mpl::false_ const&, mpl::false_ const&)
 {
    return boost::lexical_cast<T>(s);
 }
+#endif
 template <class T>
 inline BOOST_CONSTEXPR const char* make_big_value(long double, const char* s, mpl::false_ const&, mpl::true_ const&)
 {
Modified: trunk/boost/math/tools/config.hpp
==============================================================================
--- trunk/boost/math/tools/config.hpp	(original)
+++ trunk/boost/math/tools/config.hpp	2013-03-24 08:01:58 EDT (Sun, 24 Mar 2013)
@@ -217,6 +217,12 @@
 //
 #  define BOOST_MATH_USE_FLOAT128
 #endif
+//
+// Check for WinCE with no iostream support:
+//
+#if defined(_WIN32_WCE) && !defined(__SGI_STL_PORT)
+#  define BOOST_MATH_NO_LEXICAL_CAST
+#endif
 
 //
 // Helper macro for controlling the FP behaviour: