Add C++11 <cmath> overloads to the global namespace

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
This commit is contained in:
Jonathan Wakely 2016-01-20 17:44:58 +00:00 committed by Jonathan Wakely
parent cd8e73dc67
commit 3f93466af4
3 changed files with 114 additions and 0 deletions

View 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.

View 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

View file

@ -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
}