197403Sobrien// -*- C++ -*- C forwarding header. 297403Sobrien 3169691Skan// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 497403Sobrien// Free Software Foundation, Inc. 597403Sobrien// 697403Sobrien// This file is part of the GNU ISO C++ Library. This library is free 797403Sobrien// software; you can redistribute it and/or modify it under the 897403Sobrien// terms of the GNU General Public License as published by the 997403Sobrien// Free Software Foundation; either version 2, or (at your option) 1097403Sobrien// any later version. 1197403Sobrien 1297403Sobrien// This library is distributed in the hope that it will be useful, 1397403Sobrien// but WITHOUT ANY WARRANTY; without even the implied warranty of 1497403Sobrien// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1597403Sobrien// GNU General Public License for more details. 1697403Sobrien 1797403Sobrien// You should have received a copy of the GNU General Public License along 1897403Sobrien// with this library; see the file COPYING. If not, write to the Free 19169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 2097403Sobrien// USA. 2197403Sobrien 2297403Sobrien// As a special exception, you may use this file as part of a free software 2397403Sobrien// library without restriction. Specifically, if other files instantiate 2497403Sobrien// templates or use macros or inline functions from this file, or you compile 2597403Sobrien// this file and link it with other files to produce an executable, this 2697403Sobrien// file does not by itself cause the resulting executable to be covered by 2797403Sobrien// the GNU General Public License. This exception does not however 2897403Sobrien// invalidate any other reasons why the executable file might be covered by 2997403Sobrien// the GNU General Public License. 3097403Sobrien 31169691Skan/** @file include/cmath 3297403Sobrien * This is a Standard C++ Library file. You should @c #include this file 3397403Sobrien * in your programs, rather than any of the "*.h" implementation files. 3497403Sobrien * 3597403Sobrien * This is the C++ version of the Standard C Library header @c math.h, 3697403Sobrien * and its contents are (mostly) the same as that header, but are all 37169691Skan * contained in the namespace @c std (except for names which are defined 38169691Skan * as macros in C). 3997403Sobrien */ 4097403Sobrien 41169691Skan// 42169691Skan// ISO C++ 14882: 26.5 C library 43169691Skan// 44169691Skan 45132720Skan#ifndef _GLIBCXX_CMATH 46132720Skan#define _GLIBCXX_CMATH 1 4797403Sobrien 4897403Sobrien#pragma GCC system_header 4997403Sobrien 5097403Sobrien#include <bits/c++config.h> 51132720Skan#include <bits/cpp_type_traits.h> 52169691Skan#include <ext/type_traits.h> 5397403Sobrien 5497403Sobrien#include <math.h> 5597403Sobrien 5697403Sobrien// Get rid of those macros defined in <math.h> in lieu of real functions. 5797403Sobrien#undef abs 5897403Sobrien#undef div 5997403Sobrien#undef acos 6097403Sobrien#undef asin 6197403Sobrien#undef atan 6297403Sobrien#undef atan2 6397403Sobrien#undef ceil 6497403Sobrien#undef cos 6597403Sobrien#undef cosh 6697403Sobrien#undef exp 6797403Sobrien#undef fabs 6897403Sobrien#undef floor 6997403Sobrien#undef fmod 7097403Sobrien#undef frexp 7197403Sobrien#undef ldexp 7297403Sobrien#undef log 7397403Sobrien#undef log10 7497403Sobrien#undef modf 7597403Sobrien#undef pow 7697403Sobrien#undef sin 7797403Sobrien#undef sinh 7897403Sobrien#undef sqrt 7997403Sobrien#undef tan 8097403Sobrien#undef tanh 8197403Sobrien 82169691Skan_GLIBCXX_BEGIN_NAMESPACE(std) 83117397Skan 8497403Sobrien // Forward declaration of a helper function. This really should be 8597403Sobrien // an `exported' forward declaration. 8697403Sobrien template<typename _Tp> _Tp __cmath_power(_Tp, unsigned int); 8797403Sobrien 8897403Sobrien inline double 8997403Sobrien abs(double __x) 9097403Sobrien { return __builtin_fabs(__x); } 9197403Sobrien 9297403Sobrien inline float 9397403Sobrien abs(float __x) 9497403Sobrien { return __builtin_fabsf(__x); } 9597403Sobrien 9697403Sobrien inline long double 9797403Sobrien abs(long double __x) 9897403Sobrien { return __builtin_fabsl(__x); } 9997403Sobrien 10097403Sobrien using ::acos; 10197403Sobrien 102132720Skan inline float 103132720Skan acos(float __x) 104132720Skan { return __builtin_acosf(__x); } 105132720Skan 106132720Skan inline long double 107132720Skan acos(long double __x) 108132720Skan { return __builtin_acosl(__x); } 109132720Skan 110132720Skan template<typename _Tp> 111169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 112169691Skan double>::__type 113132720Skan acos(_Tp __x) 114169691Skan { return __builtin_acos(__x); } 115132720Skan 11697403Sobrien using ::asin; 11797403Sobrien 118132720Skan inline float 119132720Skan asin(float __x) 120132720Skan { return __builtin_asinf(__x); } 12197403Sobrien 122132720Skan inline long double 123132720Skan asin(long double __x) 124132720Skan { return __builtin_asinl(__x); } 12597403Sobrien 126132720Skan template<typename _Tp> 127169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 128169691Skan double>::__type 129132720Skan asin(_Tp __x) 130132720Skan { return __builtin_asin(__x); } 131132720Skan 13297403Sobrien using ::atan; 13397403Sobrien 134132720Skan inline float 135132720Skan atan(float __x) 136132720Skan { return __builtin_atanf(__x); } 13797403Sobrien 138132720Skan inline long double 139132720Skan atan(long double __x) 140132720Skan { return __builtin_atanl(__x); } 14197403Sobrien 142132720Skan template<typename _Tp> 143169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 144169691Skan double>::__type 145132720Skan atan(_Tp __x) 146132720Skan { return __builtin_atan(__x); } 147132720Skan 14897403Sobrien using ::atan2; 14997403Sobrien 150132720Skan inline float 15197403Sobrien atan2(float __y, float __x) 152132720Skan { return __builtin_atan2f(__y, __x); } 15397403Sobrien 154132720Skan inline long double 155132720Skan atan2(long double __y, long double __x) 156132720Skan { return __builtin_atan2l(__y, __x); } 15797403Sobrien 158132720Skan template<typename _Tp, typename _Up> 159169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value 160169691Skan && __is_integer<_Up>::__value, 161169691Skan double>::__type 162132720Skan atan2(_Tp __y, _Up __x) 163132720Skan { return __builtin_atan2(__y, __x); } 164132720Skan 16597403Sobrien using ::ceil; 16697403Sobrien 167132720Skan inline float 168132720Skan ceil(float __x) 169132720Skan { return __builtin_ceilf(__x); } 17097403Sobrien 171132720Skan inline long double 172132720Skan ceil(long double __x) 173132720Skan { return __builtin_ceill(__x); } 17497403Sobrien 175132720Skan template<typename _Tp> 176169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 177169691Skan double>::__type 178132720Skan ceil(_Tp __x) 179132720Skan { return __builtin_ceil(__x); } 180132720Skan 18197403Sobrien using ::cos; 18297403Sobrien 18397403Sobrien inline float 18497403Sobrien cos(float __x) 18597403Sobrien { return __builtin_cosf(__x); } 18697403Sobrien 18797403Sobrien inline long double 18897403Sobrien cos(long double __x) 18997403Sobrien { return __builtin_cosl(__x); } 19097403Sobrien 191132720Skan template<typename _Tp> 192169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 193169691Skan double>::__type 194132720Skan cos(_Tp __x) 195132720Skan { return __builtin_cos(__x); } 196132720Skan 19797403Sobrien using ::cosh; 19897403Sobrien 199132720Skan inline float 200132720Skan cosh(float __x) 201132720Skan { return __builtin_coshf(__x); } 20297403Sobrien 203132720Skan inline long double 204132720Skan cosh(long double __x) 205132720Skan { return __builtin_coshl(__x); } 20697403Sobrien 207132720Skan template<typename _Tp> 208169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 209169691Skan double>::__type 210132720Skan cosh(_Tp __x) 211132720Skan { return __builtin_cosh(__x); } 212132720Skan 21397403Sobrien using ::exp; 21497403Sobrien 215132720Skan inline float 216132720Skan exp(float __x) 217132720Skan { return __builtin_expf(__x); } 21897403Sobrien 219132720Skan inline long double 220132720Skan exp(long double __x) 221132720Skan { return __builtin_expl(__x); } 22297403Sobrien 223132720Skan template<typename _Tp> 224169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 225169691Skan double>::__type 226132720Skan exp(_Tp __x) 227132720Skan { return __builtin_exp(__x); } 228132720Skan 22997403Sobrien using ::fabs; 23097403Sobrien 23197403Sobrien inline float 23297403Sobrien fabs(float __x) 23397403Sobrien { return __builtin_fabsf(__x); } 23497403Sobrien 23597403Sobrien inline long double 23697403Sobrien fabs(long double __x) 23797403Sobrien { return __builtin_fabsl(__x); } 23897403Sobrien 239132720Skan template<typename _Tp> 240169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 241169691Skan double>::__type 242132720Skan fabs(_Tp __x) 243132720Skan { return __builtin_fabs(__x); } 244132720Skan 24597403Sobrien using ::floor; 24697403Sobrien 247132720Skan inline float 248132720Skan floor(float __x) 249132720Skan { return __builtin_floorf(__x); } 25097403Sobrien 251132720Skan inline long double 252132720Skan floor(long double __x) 253132720Skan { return __builtin_floorl(__x); } 25497403Sobrien 255132720Skan template<typename _Tp> 256169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 257169691Skan double>::__type 258132720Skan floor(_Tp __x) 259132720Skan { return __builtin_floor(__x); } 260132720Skan 26197403Sobrien using ::fmod; 26297403Sobrien 263132720Skan inline float 26497403Sobrien fmod(float __x, float __y) 265132720Skan { return __builtin_fmodf(__x, __y); } 26697403Sobrien 267132720Skan inline long double 268132720Skan fmod(long double __x, long double __y) 269132720Skan { return __builtin_fmodl(__x, __y); } 27097403Sobrien 27197403Sobrien using ::frexp; 27297403Sobrien 273132720Skan inline float 274132720Skan frexp(float __x, int* __exp) 275132720Skan { return __builtin_frexpf(__x, __exp); } 27697403Sobrien 277132720Skan inline long double 278132720Skan frexp(long double __x, int* __exp) 279132720Skan { return __builtin_frexpl(__x, __exp); } 28097403Sobrien 281132720Skan template<typename _Tp> 282169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 283169691Skan double>::__type 284132720Skan frexp(_Tp __x, int* __exp) 285132720Skan { return __builtin_frexp(__x, __exp); } 286132720Skan 28797403Sobrien using ::ldexp; 28897403Sobrien 289132720Skan inline float 29097403Sobrien ldexp(float __x, int __exp) 291132720Skan { return __builtin_ldexpf(__x, __exp); } 29297403Sobrien 293132720Skan inline long double 294132720Skan ldexp(long double __x, int __exp) 295132720Skan { return __builtin_ldexpl(__x, __exp); } 29697403Sobrien 297132720Skan template<typename _Tp> 298169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 299169691Skan double>::__type 300132720Skan ldexp(_Tp __x, int __exp) 301132720Skan { return __builtin_ldexp(__x, __exp); } 302132720Skan 30397403Sobrien using ::log; 30497403Sobrien 305132720Skan inline float 306132720Skan log(float __x) 307132720Skan { return __builtin_logf(__x); } 30897403Sobrien 309132720Skan inline long double 310132720Skan log(long double __x) 311132720Skan { return __builtin_logl(__x); } 31297403Sobrien 313132720Skan template<typename _Tp> 314169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 315169691Skan double>::__type 316132720Skan log(_Tp __x) 317132720Skan { return __builtin_log(__x); } 318132720Skan 31997403Sobrien using ::log10; 32097403Sobrien 321132720Skan inline float 322132720Skan log10(float __x) 323132720Skan { return __builtin_log10f(__x); } 32497403Sobrien 325132720Skan inline long double 326132720Skan log10(long double __x) 327132720Skan { return __builtin_log10l(__x); } 32897403Sobrien 329132720Skan template<typename _Tp> 330169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 331169691Skan double>::__type 332132720Skan log10(_Tp __x) 333132720Skan { return __builtin_log10(__x); } 334132720Skan 33597403Sobrien using ::modf; 33697403Sobrien 337132720Skan inline float 33897403Sobrien modf(float __x, float* __iptr) 339132720Skan { return __builtin_modff(__x, __iptr); } 34097403Sobrien 341132720Skan inline long double 342132720Skan modf(long double __x, long double* __iptr) 343132720Skan { return __builtin_modfl(__x, __iptr); } 34497403Sobrien 34597403Sobrien template<typename _Tp> 34697403Sobrien inline _Tp 34797403Sobrien __pow_helper(_Tp __x, int __n) 34897403Sobrien { 34997403Sobrien return __n < 0 35097403Sobrien ? _Tp(1)/__cmath_power(__x, -__n) 35197403Sobrien : __cmath_power(__x, __n); 35297403Sobrien } 35397403Sobrien 35497403Sobrien using ::pow; 35597403Sobrien 356132720Skan inline float 35797403Sobrien pow(float __x, float __y) 358132720Skan { return __builtin_powf(__x, __y); } 35997403Sobrien 360132720Skan inline long double 361132720Skan pow(long double __x, long double __y) 362132720Skan { return __builtin_powl(__x, __y); } 36397403Sobrien 364132720Skan inline double 36597403Sobrien pow(double __x, int __i) 366169691Skan { return __builtin_powi(__x, __i); } 36797403Sobrien 368132720Skan inline float 36997403Sobrien pow(float __x, int __n) 370169691Skan { return __builtin_powif(__x, __n); } 37197403Sobrien 372132720Skan inline long double 37397403Sobrien pow(long double __x, int __n) 374169691Skan { return __builtin_powil(__x, __n); } 37597403Sobrien 37697403Sobrien using ::sin; 37797403Sobrien 37897403Sobrien inline float 37997403Sobrien sin(float __x) 38097403Sobrien { return __builtin_sinf(__x); } 38197403Sobrien 38297403Sobrien inline long double 38397403Sobrien sin(long double __x) 38497403Sobrien { return __builtin_sinl(__x); } 38597403Sobrien 386132720Skan template<typename _Tp> 387169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 388169691Skan double>::__type 389132720Skan sin(_Tp __x) 390132720Skan { return __builtin_sin(__x); } 391132720Skan 39297403Sobrien using ::sinh; 39397403Sobrien 394132720Skan inline float 395132720Skan sinh(float __x) 396132720Skan { return __builtin_sinhf(__x); } 39797403Sobrien 398132720Skan inline long double 399132720Skan sinh(long double __x) 400132720Skan { return __builtin_sinhl(__x); } 40197403Sobrien 402132720Skan template<typename _Tp> 403169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 404169691Skan double>::__type 405132720Skan sinh(_Tp __x) 406132720Skan { return __builtin_sinh(__x); } 407132720Skan 40897403Sobrien using ::sqrt; 40997403Sobrien 41097403Sobrien inline float 41197403Sobrien sqrt(float __x) 41297403Sobrien { return __builtin_sqrtf(__x); } 41397403Sobrien 41497403Sobrien inline long double 41597403Sobrien sqrt(long double __x) 41697403Sobrien { return __builtin_sqrtl(__x); } 41797403Sobrien 418132720Skan template<typename _Tp> 419169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 420169691Skan double>::__type 421132720Skan sqrt(_Tp __x) 422132720Skan { return __builtin_sqrt(__x); } 423132720Skan 42497403Sobrien using ::tan; 42597403Sobrien 426132720Skan inline float 427132720Skan tan(float __x) 428132720Skan { return __builtin_tanf(__x); } 42997403Sobrien 430132720Skan inline long double 431132720Skan tan(long double __x) 432132720Skan { return __builtin_tanl(__x); } 43397403Sobrien 434132720Skan template<typename _Tp> 435169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 436169691Skan double>::__type 437132720Skan tan(_Tp __x) 438132720Skan { return __builtin_tan(__x); } 439132720Skan 44097403Sobrien using ::tanh; 44197403Sobrien 442132720Skan inline float 443132720Skan tanh(float __x) 444132720Skan { return __builtin_tanhf(__x); } 44597403Sobrien 446132720Skan inline long double 447132720Skan tanh(long double __x) 448132720Skan { return __builtin_tanhl(__x); } 44997403Sobrien 450132720Skan template<typename _Tp> 451169691Skan inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 452169691Skan double>::__type 453132720Skan tanh(_Tp __x) 454132720Skan { return __builtin_tanh(__x); } 45597403Sobrien 456169691Skan_GLIBCXX_END_NAMESPACE 457169691Skan 458132720Skan#if _GLIBCXX_USE_C99_MATH 459132720Skan#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC 46097403Sobrien// These are possible macros imported from C99-land. For strict 46197403Sobrien// conformance, remove possible C99-injected names from the global 462132720Skan// namespace, and sequester them in the __gnu_cxx extension namespace. 463169691Skan 464169691Skan_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) 465169691Skan 46697403Sobrien template<typename _Tp> 467161653Skan inline int 46897403Sobrien __capture_fpclassify(_Tp __f) { return fpclassify(__f); } 46997403Sobrien 47097403Sobrien template<typename _Tp> 471161653Skan inline int 47297403Sobrien __capture_isfinite(_Tp __f) { return isfinite(__f); } 47397403Sobrien 47497403Sobrien template<typename _Tp> 475161653Skan inline int 47697403Sobrien __capture_isinf(_Tp __f) { return isinf(__f); } 47797403Sobrien 47897403Sobrien template<typename _Tp> 479161653Skan inline int 48097403Sobrien __capture_isnan(_Tp __f) { return isnan(__f); } 48197403Sobrien 48297403Sobrien template<typename _Tp> 483161653Skan inline int 48497403Sobrien __capture_isnormal(_Tp __f) { return isnormal(__f); } 48597403Sobrien 48697403Sobrien template<typename _Tp> 487161653Skan inline int 48897403Sobrien __capture_signbit(_Tp __f) { return signbit(__f); } 48997403Sobrien 49097403Sobrien template<typename _Tp> 491161653Skan inline int 49297403Sobrien __capture_isgreater(_Tp __f1, _Tp __f2) 49397403Sobrien { return isgreater(__f1, __f2); } 49497403Sobrien 49597403Sobrien template<typename _Tp> 496161653Skan inline int 497161653Skan __capture_isgreaterequal(_Tp __f1, _Tp __f2) 498161653Skan { return isgreaterequal(__f1, __f2); } 49997403Sobrien 50097403Sobrien template<typename _Tp> 501161653Skan inline int 502161653Skan __capture_isless(_Tp __f1, _Tp __f2) { return isless(__f1, __f2); } 50397403Sobrien 50497403Sobrien template<typename _Tp> 505161653Skan inline int 506161653Skan __capture_islessequal(_Tp __f1, _Tp __f2) 507161653Skan { return islessequal(__f1, __f2); } 50897403Sobrien 50997403Sobrien template<typename _Tp> 510161653Skan inline int 511161653Skan __capture_islessgreater(_Tp __f1, _Tp __f2) 512161653Skan { return islessgreater(__f1, __f2); } 51397403Sobrien 51497403Sobrien template<typename _Tp> 515161653Skan inline int 516161653Skan __capture_isunordered(_Tp __f1, _Tp __f2) 517161653Skan { return isunordered(__f1, __f2); } 51897403Sobrien 519169691Skan_GLIBCXX_END_NAMESPACE 520169691Skan 521132720Skan// Only undefine the C99 FP macros, if actually captured for namespace movement 52297403Sobrien#undef fpclassify 52397403Sobrien#undef isfinite 52497403Sobrien#undef isinf 52597403Sobrien#undef isnan 52697403Sobrien#undef isnormal 52797403Sobrien#undef signbit 52897403Sobrien#undef isgreater 52997403Sobrien#undef isgreaterequal 53097403Sobrien#undef isless 53197403Sobrien#undef islessequal 53297403Sobrien#undef islessgreater 53397403Sobrien#undef isunordered 53497403Sobrien 535169691Skan_GLIBCXX_BEGIN_NAMESPACE(std) 536169691Skan 53797403Sobrien template<typename _Tp> 538161653Skan inline int 539169691Skan fpclassify(_Tp __f) { return ::__gnu_cxx::__capture_fpclassify(__f); } 54097403Sobrien 54197403Sobrien template<typename _Tp> 542161653Skan inline int 543169691Skan isfinite(_Tp __f) { return ::__gnu_cxx::__capture_isfinite(__f); } 54497403Sobrien 54597403Sobrien template<typename _Tp> 546161653Skan inline int 547169691Skan isinf(_Tp __f) { return ::__gnu_cxx::__capture_isinf(__f); } 54897403Sobrien 54997403Sobrien template<typename _Tp> 550161653Skan inline int 551169691Skan isnan(_Tp __f) { return ::__gnu_cxx::__capture_isnan(__f); } 55297403Sobrien 55397403Sobrien template<typename _Tp> 554161653Skan inline int 555169691Skan isnormal(_Tp __f) { return ::__gnu_cxx::__capture_isnormal(__f); } 55697403Sobrien 55797403Sobrien template<typename _Tp> 558161653Skan inline int 559169691Skan signbit(_Tp __f) { return ::__gnu_cxx::__capture_signbit(__f); } 56097403Sobrien 56197403Sobrien template<typename _Tp> 562161653Skan inline int 563169691Skan isgreater(_Tp __f1, _Tp __f2) 564169691Skan { return ::__gnu_cxx::__capture_isgreater(__f1, __f2); } 56597403Sobrien 56697403Sobrien template<typename _Tp> 567161653Skan inline int 568132720Skan isgreaterequal(_Tp __f1, _Tp __f2) 569169691Skan { return ::__gnu_cxx::__capture_isgreaterequal(__f1, __f2); } 57097403Sobrien 57197403Sobrien template<typename _Tp> 572161653Skan inline int 573169691Skan isless(_Tp __f1, _Tp __f2) 574169691Skan { return ::__gnu_cxx::__capture_isless(__f1, __f2); } 57597403Sobrien 57697403Sobrien template<typename _Tp> 577161653Skan inline int 578132720Skan islessequal(_Tp __f1, _Tp __f2) 579169691Skan { return ::__gnu_cxx::__capture_islessequal(__f1, __f2); } 58097403Sobrien 58197403Sobrien template<typename _Tp> 582161653Skan inline int 583132720Skan islessgreater(_Tp __f1, _Tp __f2) 584169691Skan { return ::__gnu_cxx::__capture_islessgreater(__f1, __f2); } 58597403Sobrien 58697403Sobrien template<typename _Tp> 587161653Skan inline int 588132720Skan isunordered(_Tp __f1, _Tp __f2) 589169691Skan { return ::__gnu_cxx::__capture_isunordered(__f1, __f2); } 59097403Sobrien 591169691Skan_GLIBCXX_END_NAMESPACE 592253563Stheravenusing std::isnan; 593253563Stheravenusing std::isinf; 594169691Skan 595132720Skan#endif /* _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC */ 59697403Sobrien#endif 597132720Skan 598132720Skan#ifndef _GLIBCXX_EXPORT_TEMPLATE 599132720Skan# include <bits/cmath.tcc> 60097403Sobrien#endif 60197403Sobrien 60297403Sobrien#endif 603