$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r85354 - trunk/boost/multiprecision
From: john_at_[hidden]
Date: 2013-08-15 06:45:49
Author: johnmaddock
Date: 2013-08-15 06:45:49 EDT (Thu, 15 Aug 2013)
New Revision: 85354
URL: http://svn.boost.org/trac/boost/changeset/85354
Log:
Improve _Quad/__float128 selection logic.
Text files modified: 
   trunk/boost/multiprecision/float128.hpp |    32 ++++++++++++++++++++++++++------        
   1 files changed, 26 insertions(+), 6 deletions(-)
Modified: trunk/boost/multiprecision/float128.hpp
==============================================================================
--- trunk/boost/multiprecision/float128.hpp	Thu Aug 15 06:02:25 2013	(r85353)
+++ trunk/boost/multiprecision/float128.hpp	2013-08-15 06:45:49 EDT (Thu, 15 Aug 2013)	(r85354)
@@ -10,8 +10,30 @@
 #include <boost/scoped_array.hpp>
 #include <boost/multiprecision/number.hpp>
 
+#if defined(BOOST_INTEL) && !defined(BOOST_MP_USE_FLOAT128) && !defined(BOOST_MP_USE_QUAD)
+#  if defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION >= 1310) && defined(__GNUC__)
+#    if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6))
+#      define BOOST_MP_USE_FLOAT128
+#    endif
+#  endif
+
+#  ifndef BOOST_MP_USE_FLOAT128
+#    define BOOST_MP_USE_QUAD
+#  endif
+#endif
+
+#if defined(__GNUC__) && !defined(BOOST_MP_USE_FLOAT128) && !defined(BOOST_MP_USE_QUAD)
+#  define BOOST_MP_USE_FLOAT128
+#endif
+
+#if !defined(BOOST_MP_USE_FLOAT128) && !defined(BOOST_MP_USE_QUAD)
+#  error "Sorry compiler is neither GCC, not Intel, don't know how to configure this header."
+#endif
+#if defined(BOOST_MP_USE_FLOAT128) && defined(BOOST_MP_USE_QUAD)
+#  error "Oh dear, both BOOST_MP_USE_FLOAT128 and BOOST_MP_USE_QUAD are defined, which one should I be using?"
+#endif
 
-#if !defined(BOOST_INTEL) || (defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION >= 1310) && defined(__GNUC__))
+#if defined(BOOST_MP_USE_FLOAT128)
 
 extern "C" {
 #include <quadmath.h>
@@ -19,9 +41,7 @@
 
 typedef __float128 float128_type;
 
-#else
-
-#define BOOST_MP_FLOAT128_IS_INTEL_QUAD
+#elif defined(BOOST_MP_USE_QUAD)
 
 #include <boost/multiprecision/detail/float_string_cvt.hpp>
 
@@ -134,7 +154,7 @@
    }
    float128_backend& operator = (const char* s)
    {
-#ifndef BOOST_MP_FLOAT128_IS_INTEL_QUAD
+#ifndef BOOST_MP_USE_QUAD
       char* p_end;
       m_value = strtoflt128(s, &p_end);
       if(p_end - s != (std::ptrdiff_t)std::strlen(s))
@@ -152,7 +172,7 @@
    }
    std::string str(std::streamsize digits, std::ios_base::fmtflags f)const
    {
-#ifndef BOOST_MP_FLOAT128_IS_INTEL_QUAD
+#ifndef BOOST_MP_USE_QUAD
       char buf[100];
       boost::scoped_array<char> buf2;
       std::string format = "%";