]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Add C++11 <cmath> overloads to the global namespace
authorJonathan Wakely <jwakely@redhat.com>
Wed, 20 Jan 2016 17:44:58 +0000 (17:44 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 20 Jan 2016 17:44:58 +0000 (17:44 +0000)
PR libstdc++/60401
* include/c_compatibility/math.h (acosh, asinh, atanh, acbrt,
copysign, erf, erfc, exp2, expm1, fdim, fma, fmax, fmin, hypot, ilogb,
lgamma, llrint, llround, log1p, log2, logb, lrint, lround, nearbyint,
nextafter, nexttoward, remainder, remquo, rint, round, scalbln, scalbn,
tgamma, trunc) [__cplusplus >= 201103L && _GLIBCXX_USE_C99_MATH_TR1]:
Add using declarations.
* testsuite/26_numerics/headers/cmath/60401.cc: New.

From-SVN: r232627

libstdc++-v3/ChangeLog
libstdc++-v3/include/c_compatibility/math.h
libstdc++-v3/testsuite/26_numerics/headers/cmath/60401.cc [new file with mode: 0644]

index b78a2f74836d41c09cbb8b723edf9b93d223d33a..577490b6e8a433eda41554b2ae652215fa55bbe5 100644 (file)
@@ -1,5 +1,14 @@
 2016-01-20  Jonathan Wakely  <jwakely@redhat.com>
 
+       PR libstdc++/60401
+       * include/c_compatibility/math.h (acosh, asinh, atanh, acbrt,
+       copysign, erf, erfc, exp2, expm1, fdim, fma, fmax, fmin, hypot, ilogb,
+       lgamma, llrint, llround, log1p, log2, logb, lrint, lround, nearbyint,
+       nextafter, nexttoward, remainder, remquo, rint, round, scalbln, scalbn,
+       tgamma, trunc) [__cplusplus >= 201103L && _GLIBCXX_USE_C99_MATH_TR1]:
+       Add using declarations.
+       * testsuite/26_numerics/headers/cmath/60401.cc: New.
+
        PR libstdc++/69386
        * include/c_global/ccomplex: Ensure C++ language linkage.
        * include/c_global/cmath: Likewise.
index 67f5ef1afa1d1194b92e134f07d4ade74808a65c..d1fe75d78c6ae4358beb11bbca6b0298c49a7c29 100644 (file)
@@ -74,5 +74,42 @@ using std::islessgreater;
 using std::isunordered;
 #endif
 
+#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99_MATH_TR1)
+using std::acosh;
+using std::asinh;
+using std::atanh;
+using std::cbrt;
+using std::copysign;
+using std::erf;
+using std::erfc;
+using std::exp2;
+using std::expm1;
+using std::fdim;
+using std::fma;
+using std::fmax;
+using std::fmin;
+using std::hypot;
+using std::ilogb;
+using std::lgamma;
+using std::llrint;
+using std::llround;
+using std::log1p;
+using std::log2;
+using std::logb;
+using std::lrint;
+using std::lround;
+using std::nearbyint;
+using std::nextafter;
+using std::nexttoward;
+using std::remainder;
+using std::remquo;
+using std::rint;
+using std::round;
+using std::scalbln;
+using std::scalbn;
+using std::tgamma;
+using std::trunc;
+#endif // C++11 && _GLIBCXX_USE_C99_MATH_TR1
+
 #endif
 #endif
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/60401.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/60401.cc
new file mode 100644 (file)
index 0000000..a6be94a
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright (C) 2016 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// PR libstdc++/60401
+
+#include <math.h>
+
+namespace test
+{
+  template<typename T>
+    using F = T*;
+
+  F<float(float)>abs = ::abs;
+
+#ifdef _GLIBCXX_USE_C99_MATH_TR1
+  F<float(float)>              acosh           = ::acosh;
+  F<float(float)>              asinh           = ::asinh;
+  F<float(float)>              atanh           = ::atanh;
+  F<float(float)>              cbrt            = ::cbrt;
+  F<float(float, float)>       copysign        = ::copysign;
+  F<float(float)>              erf             = ::erf;
+  F<float(float)>              erfc            = ::erfc;
+  F<float(float)>              exp2            = ::exp2;
+  F<float(float)>              expm1           = ::expm1;
+  F<float(float, float)>       fdim            = ::fdim;
+  F<float(float, float, float)>        fma             = ::fma;
+  F<float(float, float)>       fmax            = ::fmax;
+  F<float(float, float)>       fmin            = ::fmin;
+  F<float(float, float)>       hypot           = ::hypot;
+  F<int(float)>                        ilogb           = ::ilogb;
+  F<float(float)>              lgamma          = ::lgamma;
+  F<long long(float)>          llrint          = ::llrint;
+  F<long long(float)>          llround         = ::llround;
+  F<float(float)>              log1p           = ::log1p;
+  F<float(float)>              log2            = ::log2;
+  F<float(float)>              logb            = ::logb;
+  F<long(float)>               lrint           = ::lrint;
+  F<long(float)>               lround          = ::lround;
+  F<float(float)>              nearbyint       = ::nearbyint;
+  F<float(float, float)>       nextafter       = ::nextafter;
+  F<float(float, long double)> nexttoward      = ::nexttoward;
+  F<float(float, float)>       remainder       = ::remainder;
+  F<float(float, float, int*)> remquo          = ::remquo;
+  F<float(float)>              rint            = ::rint;
+  F<float(float)>              round           = ::round;
+  F<float(float, long)>                scalbln         = ::scalbln;
+  F<float(float, int)>         scalbn          = ::scalbn;
+  F<float(float)>              tgamma          = ::tgamma;
+  F<float(float)>              trunc           = ::trunc;
+#endif
+}