components/gcc49/patches/027-cmath_c99.patch
changeset 5205 eaff9ab86216
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/gcc49/patches/027-cmath_c99.patch	Wed Dec 16 20:20:50 2015 -0800
@@ -0,0 +1,1448 @@
+# Imported from GCC upstream. Originally applied to GCC > 5.3, backported
+# to 4.9.3 and 5.3.
+#
+# S12 build 86 introduces changes to <math.h> and <iso/math_c99.h>.
+# <iso/math_c99.h> now contains the inline template declarations and
+# definitions of many C99 Math C++ functions.
+# This wreaks havoc for consumers of cmath. We have no choice but to do
+# an adjustment to cmath. Corresponding changes to ./configure to make it
+# recognize when it cmatch changes are needed are included in
+# this patch.  The bulk of the changes are based on a recent upstream
+# changeset:
+#   https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=230807
+#
+# The correct solution here is to fix <iso/math_c99.h>. The changes
+# introduced in build 86 are unnecessary and ill-formed.
+diff -r -u libstdc++-v3/include/c_global/cmath libstdc++-v3/include/c_global/cmath
+--- libstdc++-v3/include/c_global/cmath	Thu Jan  2 14:30:10 2014
++++ libstdc++-v3/include/c_global/cmath	Thu Dec 10 07:37:50 2015
+@@ -557,6 +557,8 @@
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+ #if __cplusplus >= 201103L
++
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr int
+   fpclassify(float __x)
+   { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+@@ -571,6 +573,7 @@
+   fpclassify(long double __x)
+   { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+ 				FP_SUBNORMAL, FP_ZERO, __x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+@@ -578,6 +581,7 @@
+     fpclassify(_Tp __x)
+     { return __x != 0 ? FP_NORMAL : FP_ZERO; }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr bool
+   isfinite(float __x)
+   { return __builtin_isfinite(__x); }
+@@ -589,6 +593,7 @@
+   constexpr bool
+   isfinite(long double __x)
+   { return __builtin_isfinite(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+@@ -596,6 +601,7 @@
+     isfinite(_Tp __x)
+     { return true; }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr bool
+   isinf(float __x)
+   { return __builtin_isinf(__x); }
+@@ -607,6 +613,7 @@
+   constexpr bool
+   isinf(long double __x)
+   { return __builtin_isinf(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+@@ -614,6 +621,7 @@
+     isinf(_Tp __x)
+     { return false; }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr bool
+   isnan(float __x)
+   { return __builtin_isnan(__x); }
+@@ -625,6 +633,7 @@
+   constexpr bool
+   isnan(long double __x)
+   { return __builtin_isnan(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+@@ -632,6 +641,7 @@
+     isnan(_Tp __x)
+     { return false; }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr bool
+   isnormal(float __x)
+   { return __builtin_isnormal(__x); }
+@@ -643,6 +653,7 @@
+   constexpr bool
+   isnormal(long double __x)
+   { return __builtin_isnormal(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+@@ -650,6 +661,7 @@
+     isnormal(_Tp __x)
+     { return __x != 0 ? true : false; }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   // The front-end doesn't provide a type generic builtin (libstdc++/58625).
+   constexpr bool
+   signbit(float __x)
+@@ -662,6 +674,7 @@
+   constexpr bool
+   signbit(long double __x)
+   { return __builtin_signbitl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+@@ -669,6 +682,7 @@
+     signbit(_Tp __x)
+     { return __x < 0 ? true : false; }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr bool
+   isgreater(float __x, float __y)
+   { return __builtin_isgreater(__x, __y); }
+@@ -680,6 +694,7 @@
+   constexpr bool
+   isgreater(long double __x, long double __y)
+   { return __builtin_isgreater(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename
+@@ -691,6 +706,7 @@
+       return __builtin_isgreater(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr bool
+   isgreaterequal(float __x, float __y)
+   { return __builtin_isgreaterequal(__x, __y); }
+@@ -702,6 +718,7 @@
+   constexpr bool
+   isgreaterequal(long double __x, long double __y)
+   { return __builtin_isgreaterequal(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename
+@@ -713,6 +730,7 @@
+       return __builtin_isgreaterequal(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr bool
+   isless(float __x, float __y)
+   { return __builtin_isless(__x, __y); }
+@@ -724,6 +742,7 @@
+   constexpr bool
+   isless(long double __x, long double __y)
+   { return __builtin_isless(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename
+@@ -735,6 +754,7 @@
+       return __builtin_isless(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr bool
+   islessequal(float __x, float __y)
+   { return __builtin_islessequal(__x, __y); }
+@@ -746,6 +766,7 @@
+   constexpr bool
+   islessequal(long double __x, long double __y)
+   { return __builtin_islessequal(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename
+@@ -757,6 +778,7 @@
+       return __builtin_islessequal(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr bool
+   islessgreater(float __x, float __y)
+   { return __builtin_islessgreater(__x, __y); }
+@@ -768,6 +790,7 @@
+   constexpr bool
+   islessgreater(long double __x, long double __y)
+   { return __builtin_islessgreater(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename
+@@ -779,6 +802,7 @@
+       return __builtin_islessgreater(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr bool
+   isunordered(float __x, float __y)
+   { return __builtin_isunordered(__x, __y); }
+@@ -790,6 +814,7 @@
+   constexpr bool
+   isunordered(long double __x, long double __y)
+   { return __builtin_isunordered(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename
+@@ -1180,6 +1205,7 @@
+   using ::truncl;
+ 
+   /// Additional overloads.
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   acosh(float __x)
+   { return __builtin_acoshf(__x); }
+@@ -1187,6 +1213,7 @@
+   constexpr long double
+   acosh(long double __x)
+   { return __builtin_acoshl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1194,6 +1221,7 @@
+     acosh(_Tp __x)
+     { return __builtin_acosh(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   asinh(float __x)
+   { return __builtin_asinhf(__x); }
+@@ -1201,6 +1229,7 @@
+   constexpr long double
+   asinh(long double __x)
+   { return __builtin_asinhl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1208,6 +1237,7 @@
+     asinh(_Tp __x)
+     { return __builtin_asinh(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   atanh(float __x)
+   { return __builtin_atanhf(__x); }
+@@ -1215,6 +1245,7 @@
+   constexpr long double
+   atanh(long double __x)
+   { return __builtin_atanhl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1222,6 +1253,7 @@
+     atanh(_Tp __x)
+     { return __builtin_atanh(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   cbrt(float __x)
+   { return __builtin_cbrtf(__x); }
+@@ -1229,6 +1261,7 @@
+   constexpr long double
+   cbrt(long double __x)
+   { return __builtin_cbrtl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1236,6 +1269,7 @@
+     cbrt(_Tp __x)
+     { return __builtin_cbrt(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   copysign(float __x, float __y)
+   { return __builtin_copysignf(__x, __y); }
+@@ -1243,6 +1277,7 @@
+   constexpr long double
+   copysign(long double __x, long double __y)
+   { return __builtin_copysignl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -1252,6 +1287,7 @@
+       return copysign(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   erf(float __x)
+   { return __builtin_erff(__x); }
+@@ -1259,6 +1295,7 @@
+   constexpr long double
+   erf(long double __x)
+   { return __builtin_erfl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1266,6 +1303,7 @@
+     erf(_Tp __x)
+     { return __builtin_erf(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   erfc(float __x)
+   { return __builtin_erfcf(__x); }
+@@ -1273,6 +1311,7 @@
+   constexpr long double
+   erfc(long double __x)
+   { return __builtin_erfcl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1280,6 +1319,7 @@
+     erfc(_Tp __x)
+     { return __builtin_erfc(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   exp2(float __x)
+   { return __builtin_exp2f(__x); }
+@@ -1287,6 +1327,7 @@
+   constexpr long double
+   exp2(long double __x)
+   { return __builtin_exp2l(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1294,6 +1335,7 @@
+     exp2(_Tp __x)
+     { return __builtin_exp2(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   expm1(float __x)
+   { return __builtin_expm1f(__x); }
+@@ -1301,6 +1343,7 @@
+   constexpr long double
+   expm1(long double __x)
+   { return __builtin_expm1l(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1308,6 +1351,7 @@
+     expm1(_Tp __x)
+     { return __builtin_expm1(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   fdim(float __x, float __y)
+   { return __builtin_fdimf(__x, __y); }
+@@ -1315,6 +1359,7 @@
+   constexpr long double
+   fdim(long double __x, long double __y)
+   { return __builtin_fdiml(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -1324,6 +1369,7 @@
+       return fdim(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   fma(float __x, float __y, float __z)
+   { return __builtin_fmaf(__x, __y, __z); }
+@@ -1331,6 +1377,7 @@
+   constexpr long double
+   fma(long double __x, long double __y, long double __z)
+   { return __builtin_fmal(__x, __y, __z); }
++#endif
+ 
+   template<typename _Tp, typename _Up, typename _Vp>
+     constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
+@@ -1340,6 +1387,7 @@
+       return fma(__type(__x), __type(__y), __type(__z));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   fmax(float __x, float __y)
+   { return __builtin_fmaxf(__x, __y); }
+@@ -1347,6 +1395,7 @@
+   constexpr long double
+   fmax(long double __x, long double __y)
+   { return __builtin_fmaxl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -1356,6 +1405,7 @@
+       return fmax(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   fmin(float __x, float __y)
+   { return __builtin_fminf(__x, __y); }
+@@ -1363,6 +1413,7 @@
+   constexpr long double
+   fmin(long double __x, long double __y)
+   { return __builtin_fminl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -1372,6 +1423,7 @@
+       return fmin(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   hypot(float __x, float __y)
+   { return __builtin_hypotf(__x, __y); }
+@@ -1379,6 +1431,7 @@
+   constexpr long double
+   hypot(long double __x, long double __y)
+   { return __builtin_hypotl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -1388,6 +1441,7 @@
+       return hypot(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr int
+   ilogb(float __x)
+   { return __builtin_ilogbf(__x); }
+@@ -1395,6 +1449,7 @@
+   constexpr int
+   ilogb(long double __x)
+   { return __builtin_ilogbl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr
+@@ -1403,6 +1458,7 @@
+     ilogb(_Tp __x)
+     { return __builtin_ilogb(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   lgamma(float __x)
+   { return __builtin_lgammaf(__x); }
+@@ -1410,6 +1466,7 @@
+   constexpr long double
+   lgamma(long double __x)
+   { return __builtin_lgammal(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1417,6 +1474,7 @@
+     lgamma(_Tp __x)
+     { return __builtin_lgamma(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr long long
+   llrint(float __x)
+   { return __builtin_llrintf(__x); }
+@@ -1424,6 +1482,7 @@
+   constexpr long long
+   llrint(long double __x)
+   { return __builtin_llrintl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1431,6 +1490,7 @@
+     llrint(_Tp __x)
+     { return __builtin_llrint(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr long long
+   llround(float __x)
+   { return __builtin_llroundf(__x); }
+@@ -1438,6 +1498,7 @@
+   constexpr long long
+   llround(long double __x)
+   { return __builtin_llroundl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1445,6 +1506,7 @@
+     llround(_Tp __x)
+     { return __builtin_llround(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   log1p(float __x)
+   { return __builtin_log1pf(__x); }
+@@ -1452,6 +1514,7 @@
+   constexpr long double
+   log1p(long double __x)
+   { return __builtin_log1pl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1459,6 +1522,7 @@
+     log1p(_Tp __x)
+     { return __builtin_log1p(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   // DR 568.
+   constexpr float
+   log2(float __x)
+@@ -1467,6 +1531,7 @@
+   constexpr long double
+   log2(long double __x)
+   { return __builtin_log2l(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1474,6 +1539,7 @@
+     log2(_Tp __x)
+     { return __builtin_log2(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   logb(float __x)
+   { return __builtin_logbf(__x); }
+@@ -1481,6 +1547,7 @@
+   constexpr long double
+   logb(long double __x)
+   { return __builtin_logbl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1488,6 +1555,7 @@
+     logb(_Tp __x)
+     { return __builtin_logb(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr long
+   lrint(float __x)
+   { return __builtin_lrintf(__x); }
+@@ -1495,6 +1563,7 @@
+   constexpr long
+   lrint(long double __x)
+   { return __builtin_lrintl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1502,6 +1571,7 @@
+     lrint(_Tp __x)
+     { return __builtin_lrint(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr long
+   lround(float __x)
+   { return __builtin_lroundf(__x); }
+@@ -1509,6 +1579,7 @@
+   constexpr long
+   lround(long double __x)
+   { return __builtin_lroundl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1516,6 +1587,7 @@
+     lround(_Tp __x)
+     { return __builtin_lround(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   nearbyint(float __x)
+   { return __builtin_nearbyintf(__x); }
+@@ -1523,6 +1595,7 @@
+   constexpr long double
+   nearbyint(long double __x)
+   { return __builtin_nearbyintl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1530,6 +1603,7 @@
+     nearbyint(_Tp __x)
+     { return __builtin_nearbyint(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   nextafter(float __x, float __y)
+   { return __builtin_nextafterf(__x, __y); }
+@@ -1537,6 +1611,7 @@
+   constexpr long double
+   nextafter(long double __x, long double __y)
+   { return __builtin_nextafterl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -1546,6 +1621,7 @@
+       return nextafter(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   nexttoward(float __x, long double __y)
+   { return __builtin_nexttowardf(__x, __y); }
+@@ -1553,6 +1629,7 @@
+   constexpr long double
+   nexttoward(long double __x, long double __y)
+   { return __builtin_nexttowardl(__x, __y); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1560,6 +1637,7 @@
+     nexttoward(_Tp __x, long double __y)
+     { return __builtin_nexttoward(__x, __y); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   remainder(float __x, float __y)
+   { return __builtin_remainderf(__x, __y); }
+@@ -1567,6 +1645,7 @@
+   constexpr long double
+   remainder(long double __x, long double __y)
+   { return __builtin_remainderl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -1576,6 +1655,7 @@
+       return remainder(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   remquo(float __x, float __y, int* __pquo)
+   { return __builtin_remquof(__x, __y, __pquo); }
+@@ -1583,6 +1663,7 @@
+   inline long double
+   remquo(long double __x, long double __y, int* __pquo)
+   { return __builtin_remquol(__x, __y, __pquo); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -1592,6 +1673,7 @@
+       return remquo(__type(__x), __type(__y), __pquo);
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   rint(float __x)
+   { return __builtin_rintf(__x); }
+@@ -1599,6 +1681,7 @@
+   constexpr long double
+   rint(long double __x)
+   { return __builtin_rintl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1606,6 +1689,7 @@
+     rint(_Tp __x)
+     { return __builtin_rint(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   round(float __x)
+   { return __builtin_roundf(__x); }
+@@ -1613,6 +1697,7 @@
+   constexpr long double
+   round(long double __x)
+   { return __builtin_roundl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1620,6 +1705,7 @@
+     round(_Tp __x)
+     { return __builtin_round(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   scalbln(float __x, long __ex)
+   { return __builtin_scalblnf(__x, __ex); }
+@@ -1627,6 +1713,7 @@
+   constexpr long double
+   scalbln(long double __x, long __ex)
+   { return __builtin_scalblnl(__x, __ex); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1634,6 +1721,7 @@
+     scalbln(_Tp __x, long __ex)
+     { return __builtin_scalbln(__x, __ex); }
+  
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   scalbn(float __x, int __ex)
+   { return __builtin_scalbnf(__x, __ex); }
+@@ -1641,6 +1729,7 @@
+   constexpr long double
+   scalbn(long double __x, int __ex)
+   { return __builtin_scalbnl(__x, __ex); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1648,6 +1737,7 @@
+     scalbn(_Tp __x, int __ex)
+     { return __builtin_scalbn(__x, __ex); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   tgamma(float __x)
+   { return __builtin_tgammaf(__x); }
+@@ -1655,6 +1745,7 @@
+   constexpr long double
+   tgamma(long double __x)
+   { return __builtin_tgammal(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -1662,6 +1753,7 @@
+     tgamma(_Tp __x)
+     { return __builtin_tgamma(__x); }
+  
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   constexpr float
+   trunc(float __x)
+   { return __builtin_truncf(__x); }
+@@ -1669,6 +1761,7 @@
+   constexpr long double
+   trunc(long double __x)
+   { return __builtin_truncl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+
+diff -r -u libstdc++-v3/include/tr1/cmath libstdc++-v3/include/tr1/cmath
+--- libstdc++-v3/include/tr1/cmath	Thu Jan  2 14:30:10 2014
++++ libstdc++-v3/include/tr1/cmath	Thu Dec 10 07:34:33 2015
+@@ -419,6 +419,7 @@
+   /// Additional overloads [8.16.4].
+   using std::acos;
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   acosh(float __x)
+   { return __builtin_acoshf(__x); }
+@@ -426,6 +427,7 @@
+   inline long double
+   acosh(long double __x)
+   { return __builtin_acoshl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -435,6 +437,7 @@
+ 
+   using std::asin;
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   asinh(float __x)
+   { return __builtin_asinhf(__x); }
+@@ -442,6 +445,7 @@
+   inline long double
+   asinh(long double __x)
+   { return __builtin_asinhl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -452,6 +456,7 @@
+   using std::atan;
+   using std::atan2;
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   atanh(float __x)
+   { return __builtin_atanhf(__x); }
+@@ -459,6 +464,7 @@
+   inline long double
+   atanh(long double __x)
+   { return __builtin_atanhl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -466,6 +472,7 @@
+     atanh(_Tp __x)
+     { return __builtin_atanh(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   cbrt(float __x)
+   { return __builtin_cbrtf(__x); }
+@@ -473,6 +480,7 @@
+   inline long double
+   cbrt(long double __x)
+   { return __builtin_cbrtl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -482,6 +490,7 @@
+ 
+   using std::ceil;
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   copysign(float __x, float __y)
+   { return __builtin_copysignf(__x, __y); }
+@@ -489,6 +498,7 @@
+   inline long double
+   copysign(long double __x, long double __y)
+   { return __builtin_copysignl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -501,6 +511,7 @@
+   using std::cos;
+   using std::cosh;  
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   erf(float __x)
+   { return __builtin_erff(__x); }
+@@ -508,6 +519,7 @@
+   inline long double
+   erf(long double __x)
+   { return __builtin_erfl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -515,6 +527,7 @@
+     erf(_Tp __x)
+     { return __builtin_erf(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   erfc(float __x)
+   { return __builtin_erfcf(__x); }
+@@ -522,6 +535,7 @@
+   inline long double
+   erfc(long double __x)
+   { return __builtin_erfcl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -531,6 +545,7 @@
+ 
+   using std::exp;
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   exp2(float __x)
+   { return __builtin_exp2f(__x); }
+@@ -538,6 +553,7 @@
+   inline long double
+   exp2(long double __x)
+   { return __builtin_exp2l(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -545,6 +561,7 @@
+     exp2(_Tp __x)
+     { return __builtin_exp2(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   expm1(float __x)
+   { return __builtin_expm1f(__x); }
+@@ -552,6 +569,7 @@
+   inline long double
+   expm1(long double __x)
+   { return __builtin_expm1l(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -568,6 +586,7 @@
+   using ::fabs;
+ 
+ #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   fabs(float __x)
+   { return __builtin_fabsf(__x); }
+@@ -575,6 +594,7 @@
+   inline long double
+   fabs(long double __x)
+   { return __builtin_fabsl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -583,6 +603,7 @@
+     { return __builtin_fabs(__x); }
+ #endif
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   fdim(float __x, float __y)
+   { return __builtin_fdimf(__x, __y); }
+@@ -590,6 +611,7 @@
+   inline long double
+   fdim(long double __x, long double __y)
+   { return __builtin_fdiml(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -601,6 +623,7 @@
+ 
+   using std::floor;
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   fma(float __x, float __y, float __z)
+   { return __builtin_fmaf(__x, __y, __z); }
+@@ -608,6 +631,7 @@
+   inline long double
+   fma(long double __x, long double __y, long double __z)
+   { return __builtin_fmal(__x, __y, __z); }
++#endif
+ 
+   template<typename _Tp, typename _Up, typename _Vp>
+     inline typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
+@@ -617,6 +641,7 @@
+       return fma(__type(__x), __type(__y), __type(__z));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   fmax(float __x, float __y)
+   { return __builtin_fmaxf(__x, __y); }
+@@ -624,6 +649,7 @@
+   inline long double
+   fmax(long double __x, long double __y)
+   { return __builtin_fmaxl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -633,6 +659,7 @@
+       return fmax(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   fmin(float __x, float __y)
+   { return __builtin_fminf(__x, __y); }
+@@ -640,6 +667,7 @@
+   inline long double
+   fmin(long double __x, long double __y)
+   { return __builtin_fminl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -652,6 +680,7 @@
+   using std::fmod;
+   using std::frexp;
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   hypot(float __x, float __y)
+   { return __builtin_hypotf(__x, __y); }
+@@ -659,6 +688,7 @@
+   inline long double
+   hypot(long double __x, long double __y)
+   { return __builtin_hypotl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -668,6 +698,7 @@
+       return hypot(__type(__y), __type(__x));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline int
+   ilogb(float __x)
+   { return __builtin_ilogbf(__x); }
+@@ -675,6 +706,7 @@
+   inline int
+   ilogb(long double __x)
+   { return __builtin_ilogbl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -684,6 +716,7 @@
+ 
+   using std::ldexp;
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   lgamma(float __x)
+   { return __builtin_lgammaf(__x); }
+@@ -691,6 +724,7 @@
+   inline long double
+   lgamma(long double __x)
+   { return __builtin_lgammal(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -698,6 +732,7 @@
+     lgamma(_Tp __x)
+     { return __builtin_lgamma(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline long long
+   llrint(float __x)
+   { return __builtin_llrintf(__x); }
+@@ -705,6 +740,7 @@
+   inline long long
+   llrint(long double __x)
+   { return __builtin_llrintl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -712,6 +748,7 @@
+     llrint(_Tp __x)
+     { return __builtin_llrint(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline long long
+   llround(float __x)
+   { return __builtin_llroundf(__x); }
+@@ -719,6 +756,7 @@
+   inline long long
+   llround(long double __x)
+   { return __builtin_llroundl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -729,6 +767,7 @@
+   using std::log;
+   using std::log10;
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   log1p(float __x)
+   { return __builtin_log1pf(__x); }
+@@ -736,6 +775,7 @@
+   inline long double
+   log1p(long double __x)
+   { return __builtin_log1pl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -744,6 +784,7 @@
+     { return __builtin_log1p(__x); }
+ 
+   // DR 568.
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   log2(float __x)
+   { return __builtin_log2f(__x); }
+@@ -751,6 +792,7 @@
+   inline long double
+   log2(long double __x)
+   { return __builtin_log2l(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -758,6 +800,7 @@
+     log2(_Tp __x)
+     { return __builtin_log2(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   logb(float __x)
+   { return __builtin_logbf(__x); }
+@@ -765,6 +808,7 @@
+   inline long double
+   logb(long double __x)
+   { return __builtin_logbl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -774,6 +818,7 @@
+       return __builtin_logb(__x);
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline long
+   lrint(float __x)
+   { return __builtin_lrintf(__x); }
+@@ -781,6 +826,7 @@
+   inline long
+   lrint(long double __x)
+   { return __builtin_lrintl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -788,6 +834,7 @@
+     lrint(_Tp __x)
+     { return __builtin_lrint(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline long
+   lround(float __x)
+   { return __builtin_lroundf(__x); }
+@@ -795,6 +842,7 @@
+   inline long
+   lround(long double __x)
+   { return __builtin_lroundl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -802,6 +850,7 @@
+     lround(_Tp __x)
+     { return __builtin_lround(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   nearbyint(float __x)
+   { return __builtin_nearbyintf(__x); }
+@@ -809,6 +858,7 @@
+   inline long double
+   nearbyint(long double __x)
+   { return __builtin_nearbyintl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -816,6 +866,7 @@
+     nearbyint(_Tp __x)
+     { return __builtin_nearbyint(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   nextafter(float __x, float __y)
+   { return __builtin_nextafterf(__x, __y); }
+@@ -823,6 +874,7 @@
+   inline long double
+   nextafter(long double __x, long double __y)
+   { return __builtin_nextafterl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -832,6 +884,7 @@
+       return nextafter(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   nexttoward(float __x, long double __y)
+   { return __builtin_nexttowardf(__x, __y); }
+@@ -839,6 +892,7 @@
+   inline long double
+   nexttoward(long double __x, long double __y)
+   { return __builtin_nexttowardl(__x, __y); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -846,6 +900,7 @@
+     nexttoward(_Tp __x, long double __y)
+     { return __builtin_nexttoward(__x, __y); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   remainder(float __x, float __y)
+   { return __builtin_remainderf(__x, __y); }
+@@ -853,6 +908,7 @@
+   inline long double
+   remainder(long double __x, long double __y)
+   { return __builtin_remainderl(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -862,6 +918,7 @@
+       return remainder(__type(__x), __type(__y));
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   remquo(float __x, float __y, int* __pquo)
+   { return __builtin_remquof(__x, __y, __pquo); }
+@@ -869,6 +926,7 @@
+   inline long double
+   remquo(long double __x, long double __y, int* __pquo)
+   { return __builtin_remquol(__x, __y, __pquo); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+@@ -878,6 +936,7 @@
+       return remquo(__type(__x), __type(__y), __pquo);
+     }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   rint(float __x)
+   { return __builtin_rintf(__x); }
+@@ -885,6 +944,7 @@
+   inline long double
+   rint(long double __x)
+   { return __builtin_rintl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -892,6 +952,7 @@
+     rint(_Tp __x)
+     { return __builtin_rint(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   round(float __x)
+   { return __builtin_roundf(__x); }
+@@ -899,6 +960,7 @@
+   inline long double
+   round(long double __x)
+   { return __builtin_roundl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -906,6 +968,7 @@
+     round(_Tp __x)
+     { return __builtin_round(__x); }
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   scalbln(float __x, long __ex)
+   { return __builtin_scalblnf(__x, __ex); }
+@@ -913,6 +976,7 @@
+   inline long double
+   scalbln(long double __x, long __ex)
+   { return __builtin_scalblnl(__x, __ex); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -920,6 +984,7 @@
+     scalbln(_Tp __x, long __ex)
+     { return __builtin_scalbln(__x, __ex); }
+  
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   scalbn(float __x, int __ex)
+   { return __builtin_scalbnf(__x, __ex); }
+@@ -927,6 +992,7 @@
+   inline long double
+   scalbn(long double __x, int __ex)
+   { return __builtin_scalbnl(__x, __ex); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -940,6 +1006,7 @@
+   using std::tan;
+   using std::tanh;
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   tgamma(float __x)
+   { return __builtin_tgammaf(__x); }
+@@ -947,6 +1014,7 @@
+   inline long double
+   tgamma(long double __x)
+   { return __builtin_tgammal(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -954,6 +1022,7 @@
+     tgamma(_Tp __x)
+     { return __builtin_tgamma(__x); }
+  
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   trunc(float __x)
+   { return __builtin_truncf(__x); }
+@@ -961,6 +1030,7 @@
+   inline long double
+   trunc(long double __x)
+   { return __builtin_truncl(__x); }
++#endif
+ 
+   template<typename _Tp>
+     inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+@@ -994,6 +1064,7 @@
+   // the discussion about this issue here:
+   // http://gcc.gnu.org/ml/gcc-patches/2012-09/msg01278.html
+ 
++#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
+   inline float
+   pow(float __x, float __y)
+   { return std::pow(__x, __y); }
+@@ -1001,6 +1072,7 @@
+   inline long double
+   pow(long double __x, long double __y)
+   { return std::pow(__x, __y); }
++#endif
+ 
+   template<typename _Tp, typename _Up>
+     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+
+diff -r -u libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc
+--- libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc	Thu Jan  2 14:30:10 2014
++++ libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc	Thu Dec 10 07:40:27 2015
+@@ -20,9 +20,10 @@
+ // { dg-do compile }
+ // { dg-add-options no_pch }
+ 
+-// { dg-xfail-if "" { { *-*-linux* *-*-gnu* *-*-darwin* *-*-solaris2.1[0-9]* hppa*-*-hpux* *-*-mingw* } || { uclibc || newlib } } { "*" } { "" } }
+-// { dg-excess-errors "" { target { { *-*-linux* *-*-gnu* *-*-darwin* *-*-solaris2.1[0-9]* hppa*-*-hpux* *-*-mingw* } || { uclibc || newlib } } } }
++// { dg-xfail-if "" { { *-*-linux* *-*-gnu* *-*-darwin* *-*-solaris2.1[01]* hppa*-*-hpux* *-*-mingw* *-*-aix* } || { uclibc || newlib } } { "*" } { "" } }
++// { dg-excess-errors "" { target { { *-*-linux* *-*-gnu* *-*-darwin* *-*-solaris2.1[01]* hppa*-*-hpux* *-*-mingw* *-*-aix* } || { uclibc || newlib } } } }
+ 
++
+ #include <math.h>
+ 
+ void fpclassify() { }
+
+--- libstdc++-v3/include/bits/c++config  Thu Jan  2 14:30:10 2014
++++ libstdc++-v3/include/bits/c++config       Thu Dec 10 08:35:47 2015
+@@ -456,6 +456,12 @@
+ # define _GLIBCXX_FAST_MATH 0
+ #endif
+ 
++/* Define if all C++11 overloads are available in <math.h>.  */
++#if __cplusplus >= 201103L
++#define __CORRECT_ISO_CPP11_MATH_H_PROTO 1
++#endif
++
++
+ // This marks string literals in header files to be extracted for eventual
+ // translation.  It is primarily used for messages in thrown exceptions; see
+ // src/functexcept.cc.  We use __N because the more traditional _N is used
+
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOWNERDEAD" >&5
+ $as_echo_n "checking for EOWNERDEAD... " >&6; }
+
+
+#
+# Since GCC is sensitive to which version of autoconf is used, we are
+# also including a patch to configure here to avoid running autoconf.
+# Perhaps we will make this work with the version of autoconf we are
+# shipping in the future.
+#
+diff -r -u libstdc++-v3/configure libstdc++-v3/configure
+--- libstdc++-v3/configure	Thu Jan 23 13:17:15 2014
++++ libstdc++-v3/configure		Thu Dec 10 08:19:59 2015
+@@ -17486,8 +17486,65 @@
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
++  ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ 
++  ac_save_CXXFLAGS="$CXXFLAGS"
++  CXXFLAGS="$CXXFLAGS -std=c++11"
+ 
++  case "$host" in
++    *-*-solaris2.*)
++      # Solaris 12 introduced the C++11 <math.h> overloads.  A backport to
++      # a Solaris 11.3 SRU is likely, maybe even a Solaris 10 patch.
++      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++11 <math.h> overloads" >&5
++$as_echo_n "checking for C++11 <math.h> overloads... " >&6; }
++      if ${glibcxx_cv_math11_overload+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++
++        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <math.h>
++           #undef isfinite
++           namespace std {
++             inline bool isfinite(float __x)
++             { return __builtin_isfinite(__x); }
++           }
++
++_ACEOF
++if ac_fn_cxx_try_compile "$LINENO"; then :
++  glibcxx_cv_math11_overload=no
++else
++  glibcxx_cv_math11_overload=yes
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++
++      # autoheader cannot handle indented templates.
++
++
++      if test $glibcxx_cv_math11_overload = yes; then
++        $as_echo "#define __CORRECT_ISO_CPP11_MATH_H_PROTO 1" >>confdefs.h
++
++      fi
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_math11_overload" >&5
++$as_echo "$glibcxx_cv_math11_overload" >&6; }
++      ;;
++  esac
++
++  CXXFLAGS="$ac_save_CXXFLAGS"
++  ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
+
+