1 // Static data members of -*- C++ -*- numeric_limits classes 2 3 // Copyright (C) 1999-2013 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the 7 // terms of the GNU General Public License as published by the 8 // Free Software Foundation; either version 3, or (at your option) 9 // any later version. 10 11 // This library is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 // <http://www.gnu.org/licenses/>. 24 25 // Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr> 26 27 // 28 // ISO C++ 14882:1998 29 // 18.2.1 30 // 31 32 #include <limits> 33 34 namespace std _GLIBCXX_VISIBILITY(default) 35 { 36 _GLIBCXX_BEGIN_NAMESPACE_VERSION 37 38 #define const _GLIBCXX_USE_CONSTEXPR 39 40 const bool __numeric_limits_base::is_specialized; 41 const int __numeric_limits_base::digits; 42 const int __numeric_limits_base::digits10; 43 const int __numeric_limits_base::max_digits10; 44 const bool __numeric_limits_base::is_signed; 45 const bool __numeric_limits_base::is_integer; 46 const bool __numeric_limits_base::is_exact; 47 const int __numeric_limits_base::radix; 48 const int __numeric_limits_base::min_exponent; 49 const int __numeric_limits_base::min_exponent10; 50 const int __numeric_limits_base::max_exponent; 51 const int __numeric_limits_base::max_exponent10; 52 const bool __numeric_limits_base::has_infinity; 53 const bool __numeric_limits_base::has_quiet_NaN; 54 const bool __numeric_limits_base::has_signaling_NaN; 55 const float_denorm_style __numeric_limits_base::has_denorm; 56 const bool __numeric_limits_base::has_denorm_loss; 57 const bool __numeric_limits_base::is_iec559; 58 const bool __numeric_limits_base::is_bounded; 59 const bool __numeric_limits_base::is_modulo; 60 const bool __numeric_limits_base::traps; 61 const bool __numeric_limits_base::tinyness_before; 62 const float_round_style __numeric_limits_base::round_style; 63 64 // bool 65 const bool numeric_limits<bool>::is_specialized; 66 const int numeric_limits<bool>::digits; 67 const int numeric_limits<bool>::digits10; 68 const int numeric_limits<bool>::max_digits10; 69 const bool numeric_limits<bool>::is_signed; 70 const bool numeric_limits<bool>::is_integer; 71 const bool numeric_limits<bool>::is_exact; 72 const int numeric_limits<bool>::radix; 73 const int numeric_limits<bool>::min_exponent; 74 const int numeric_limits<bool>::min_exponent10; 75 const int numeric_limits<bool>::max_exponent; 76 const int numeric_limits<bool>::max_exponent10; 77 const bool numeric_limits<bool>::has_infinity; 78 const bool numeric_limits<bool>::has_quiet_NaN; 79 const bool numeric_limits<bool>::has_signaling_NaN; 80 const float_denorm_style numeric_limits<bool>::has_denorm; 81 const bool numeric_limits<bool>::has_denorm_loss; 82 const bool numeric_limits<bool>::is_iec559; 83 const bool numeric_limits<bool>::is_bounded; 84 const bool numeric_limits<bool>::is_modulo; 85 const bool numeric_limits<bool>::traps; 86 const bool numeric_limits<bool>::tinyness_before; 87 const float_round_style numeric_limits<bool>::round_style; 88 89 // char 90 const bool numeric_limits<char>::is_specialized; 91 const int numeric_limits<char>::digits; 92 const int numeric_limits<char>::digits10; 93 const int numeric_limits<char>::max_digits10; 94 const bool numeric_limits<char>::is_signed; 95 const bool numeric_limits<char>::is_integer; 96 const bool numeric_limits<char>::is_exact; 97 const int numeric_limits<char>::radix; 98 const int numeric_limits<char>::min_exponent; 99 const int numeric_limits<char>::min_exponent10; 100 const int numeric_limits<char>::max_exponent; 101 const int numeric_limits<char>::max_exponent10; 102 const bool numeric_limits<char>::has_infinity; 103 const bool numeric_limits<char>::has_quiet_NaN; 104 const bool numeric_limits<char>::has_signaling_NaN; 105 const float_denorm_style numeric_limits<char>::has_denorm; 106 const bool numeric_limits<char>::has_denorm_loss; 107 const bool numeric_limits<char>::is_iec559; 108 const bool numeric_limits<char>::is_bounded; 109 const bool numeric_limits<char>::is_modulo; 110 const bool numeric_limits<char>::traps; 111 const bool numeric_limits<char>::tinyness_before; 112 const float_round_style numeric_limits<char>::round_style; 113 114 // signed char 115 const bool numeric_limits<signed char>::is_specialized; 116 const int numeric_limits<signed char>::digits; 117 const int numeric_limits<signed char>::digits10; 118 const int numeric_limits<signed char>::max_digits10; 119 const bool numeric_limits<signed char>::is_signed; 120 const bool numeric_limits<signed char>::is_integer; 121 const bool numeric_limits<signed char>::is_exact; 122 const int numeric_limits<signed char>::radix; 123 const int numeric_limits<signed char>::min_exponent; 124 const int numeric_limits<signed char>::min_exponent10; 125 const int numeric_limits<signed char>::max_exponent; 126 const int numeric_limits<signed char>::max_exponent10; 127 const bool numeric_limits<signed char>::has_infinity; 128 const bool numeric_limits<signed char>::has_quiet_NaN; 129 const bool numeric_limits<signed char>::has_signaling_NaN; 130 const float_denorm_style numeric_limits<signed char>::has_denorm; 131 const bool numeric_limits<signed char>::has_denorm_loss; 132 const bool numeric_limits<signed char>::is_iec559; 133 const bool numeric_limits<signed char>::is_bounded; 134 const bool numeric_limits<signed char>::is_modulo; 135 const bool numeric_limits<signed char>::traps; 136 const bool numeric_limits<signed char>::tinyness_before; 137 const float_round_style numeric_limits<signed char>::round_style; 138 139 // unsigned char 140 const bool numeric_limits<unsigned char>::is_specialized; 141 const int numeric_limits<unsigned char>::digits; 142 const int numeric_limits<unsigned char>::digits10; 143 const int numeric_limits<unsigned char>::max_digits10; 144 const bool numeric_limits<unsigned char>::is_signed; 145 const bool numeric_limits<unsigned char>::is_integer; 146 const bool numeric_limits<unsigned char>::is_exact; 147 const int numeric_limits<unsigned char>::radix; 148 const int numeric_limits<unsigned char>::min_exponent; 149 const int numeric_limits<unsigned char>::min_exponent10; 150 const int numeric_limits<unsigned char>::max_exponent; 151 const int numeric_limits<unsigned char>::max_exponent10; 152 const bool numeric_limits<unsigned char>::has_infinity; 153 const bool numeric_limits<unsigned char>::has_quiet_NaN; 154 const bool numeric_limits<unsigned char>::has_signaling_NaN; 155 const float_denorm_style numeric_limits<unsigned char>::has_denorm; 156 const bool numeric_limits<unsigned char>::has_denorm_loss; 157 const bool numeric_limits<unsigned char>::is_iec559; 158 const bool numeric_limits<unsigned char>::is_bounded; 159 const bool numeric_limits<unsigned char>::is_modulo; 160 const bool numeric_limits<unsigned char>::traps; 161 const bool numeric_limits<unsigned char>::tinyness_before; 162 const float_round_style numeric_limits<unsigned char>::round_style; 163 164 // wchar_t 165 // This used to be problematic... 166 #ifdef _GLIBCXX_USE_WCHAR_T 167 const bool numeric_limits<wchar_t>::is_specialized; 168 const int numeric_limits<wchar_t>::digits; 169 const int numeric_limits<wchar_t>::digits10; 170 const int numeric_limits<wchar_t>::max_digits10; 171 const bool numeric_limits<wchar_t>::is_signed; 172 const bool numeric_limits<wchar_t>::is_integer; 173 const bool numeric_limits<wchar_t>::is_exact; 174 const int numeric_limits<wchar_t>::radix; 175 const int numeric_limits<wchar_t>::min_exponent; 176 const int numeric_limits<wchar_t>::min_exponent10; 177 const int numeric_limits<wchar_t>::max_exponent; 178 const int numeric_limits<wchar_t>::max_exponent10; 179 const bool numeric_limits<wchar_t>::has_infinity; 180 const bool numeric_limits<wchar_t>::has_quiet_NaN; 181 const bool numeric_limits<wchar_t>::has_signaling_NaN; 182 const float_denorm_style numeric_limits<wchar_t>::has_denorm; 183 const bool numeric_limits<wchar_t>::has_denorm_loss; 184 const bool numeric_limits<wchar_t>::is_iec559; 185 const bool numeric_limits<wchar_t>::is_bounded; 186 const bool numeric_limits<wchar_t>::is_modulo; 187 const bool numeric_limits<wchar_t>::traps; 188 const bool numeric_limits<wchar_t>::tinyness_before; 189 const float_round_style numeric_limits<wchar_t>::round_style; 190 #endif // _GLIBCXX_USE_WCHAR_T 191 192 // short 193 const bool numeric_limits<short>::is_specialized; 194 const int numeric_limits<short>::digits; 195 const int numeric_limits<short>::digits10; 196 const int numeric_limits<short>::max_digits10; 197 const bool numeric_limits<short>::is_signed; 198 const bool numeric_limits<short>::is_integer; 199 const bool numeric_limits<short>::is_exact; 200 const int numeric_limits<short>::radix; 201 const int numeric_limits<short>::min_exponent; 202 const int numeric_limits<short>::min_exponent10; 203 const int numeric_limits<short>::max_exponent; 204 const int numeric_limits<short>::max_exponent10; 205 const bool numeric_limits<short>::has_infinity; 206 const bool numeric_limits<short>::has_quiet_NaN; 207 const bool numeric_limits<short>::has_signaling_NaN; 208 const float_denorm_style numeric_limits<short>::has_denorm; 209 const bool numeric_limits<short>::has_denorm_loss; 210 const bool numeric_limits<short>::is_iec559; 211 const bool numeric_limits<short>::is_bounded; 212 const bool numeric_limits<short>::is_modulo; 213 const bool numeric_limits<short>::traps; 214 const bool numeric_limits<short>::tinyness_before; 215 const float_round_style numeric_limits<short>::round_style; 216 217 // unsigned short 218 const bool numeric_limits<unsigned short>::is_specialized; 219 const int numeric_limits<unsigned short>::digits; 220 const int numeric_limits<unsigned short>::digits10; 221 const int numeric_limits<unsigned short>::max_digits10; 222 const bool numeric_limits<unsigned short>::is_signed; 223 const bool numeric_limits<unsigned short>::is_integer; 224 const bool numeric_limits<unsigned short>::is_exact; 225 const int numeric_limits<unsigned short>::radix; 226 const int numeric_limits<unsigned short>::min_exponent; 227 const int numeric_limits<unsigned short>::min_exponent10; 228 const int numeric_limits<unsigned short>::max_exponent; 229 const int numeric_limits<unsigned short>::max_exponent10; 230 const bool numeric_limits<unsigned short>::has_infinity; 231 const bool numeric_limits<unsigned short>::has_quiet_NaN; 232 const bool numeric_limits<unsigned short>::has_signaling_NaN; 233 const float_denorm_style numeric_limits<unsigned short>::has_denorm; 234 const bool numeric_limits<unsigned short>::has_denorm_loss; 235 const bool numeric_limits<unsigned short>::is_iec559; 236 const bool numeric_limits<unsigned short>::is_bounded; 237 const bool numeric_limits<unsigned short>::is_modulo; 238 const bool numeric_limits<unsigned short>::traps; 239 const bool numeric_limits<unsigned short>::tinyness_before; 240 const float_round_style numeric_limits<unsigned short>::round_style; 241 242 // int 243 const bool numeric_limits<int>::is_specialized; 244 const int numeric_limits<int>::digits; 245 const int numeric_limits<int>::digits10; 246 const int numeric_limits<int>::max_digits10; 247 const bool numeric_limits<int>::is_signed; 248 const bool numeric_limits<int>::is_integer; 249 const bool numeric_limits<int>::is_exact; 250 const int numeric_limits<int>::radix; 251 const int numeric_limits<int>::min_exponent; 252 const int numeric_limits<int>::min_exponent10; 253 const int numeric_limits<int>::max_exponent; 254 const int numeric_limits<int>::max_exponent10; 255 const bool numeric_limits<int>::has_infinity; 256 const bool numeric_limits<int>::has_quiet_NaN; 257 const bool numeric_limits<int>::has_signaling_NaN; 258 const float_denorm_style numeric_limits<int>::has_denorm; 259 const bool numeric_limits<int>::has_denorm_loss; 260 const bool numeric_limits<int>::is_iec559; 261 const bool numeric_limits<int>::is_bounded; 262 const bool numeric_limits<int>::is_modulo; 263 const bool numeric_limits<int>::traps; 264 const bool numeric_limits<int>::tinyness_before; 265 const float_round_style numeric_limits<int>::round_style; 266 267 // unsigned int 268 const bool numeric_limits<unsigned int>::is_specialized; 269 const int numeric_limits<unsigned int>::digits; 270 const int numeric_limits<unsigned int>::digits10; 271 const int numeric_limits<unsigned int>::max_digits10; 272 const bool numeric_limits<unsigned int>::is_signed; 273 const bool numeric_limits<unsigned int>::is_integer; 274 const bool numeric_limits<unsigned int>::is_exact; 275 const int numeric_limits<unsigned int>::radix; 276 const int numeric_limits<unsigned int>::min_exponent; 277 const int numeric_limits<unsigned int>::min_exponent10; 278 const int numeric_limits<unsigned int>::max_exponent; 279 const int numeric_limits<unsigned int>::max_exponent10; 280 const bool numeric_limits<unsigned int>::has_infinity; 281 const bool numeric_limits<unsigned int>::has_quiet_NaN; 282 const bool numeric_limits<unsigned int>::has_signaling_NaN; 283 const float_denorm_style numeric_limits<unsigned int>::has_denorm; 284 const bool numeric_limits<unsigned int>::has_denorm_loss; 285 const bool numeric_limits<unsigned int>::is_iec559; 286 const bool numeric_limits<unsigned int>::is_bounded; 287 const bool numeric_limits<unsigned int>::is_modulo; 288 const bool numeric_limits<unsigned int>::traps; 289 const bool numeric_limits<unsigned int>::tinyness_before; 290 const float_round_style numeric_limits<unsigned int>::round_style; 291 292 // long 293 const bool numeric_limits<long>::is_specialized; 294 const int numeric_limits<long>::digits; 295 const int numeric_limits<long>::digits10; 296 const int numeric_limits<long>::max_digits10; 297 const bool numeric_limits<long>::is_signed; 298 const bool numeric_limits<long>::is_integer; 299 const bool numeric_limits<long>::is_exact; 300 const int numeric_limits<long>::radix; 301 const int numeric_limits<long>::min_exponent; 302 const int numeric_limits<long>::min_exponent10; 303 const int numeric_limits<long>::max_exponent; 304 const int numeric_limits<long>::max_exponent10; 305 const bool numeric_limits<long>::has_infinity; 306 const bool numeric_limits<long>::has_quiet_NaN; 307 const bool numeric_limits<long>::has_signaling_NaN; 308 const float_denorm_style numeric_limits<long>::has_denorm; 309 const bool numeric_limits<long>::has_denorm_loss; 310 const bool numeric_limits<long>::is_iec559; 311 const bool numeric_limits<long>::is_bounded; 312 const bool numeric_limits<long>::is_modulo; 313 const bool numeric_limits<long>::traps; 314 const bool numeric_limits<long>::tinyness_before; 315 const float_round_style numeric_limits<long>::round_style; 316 317 // unsigned long 318 const bool numeric_limits<unsigned long>::is_specialized; 319 const int numeric_limits<unsigned long>::digits; 320 const int numeric_limits<unsigned long>::digits10; 321 const int numeric_limits<unsigned long>::max_digits10; 322 const bool numeric_limits<unsigned long>::is_signed; 323 const bool numeric_limits<unsigned long>::is_integer; 324 const bool numeric_limits<unsigned long>::is_exact; 325 const int numeric_limits<unsigned long>::radix; 326 const int numeric_limits<unsigned long>::min_exponent; 327 const int numeric_limits<unsigned long>::min_exponent10; 328 const int numeric_limits<unsigned long>::max_exponent; 329 const int numeric_limits<unsigned long>::max_exponent10; 330 const bool numeric_limits<unsigned long>::has_infinity; 331 const bool numeric_limits<unsigned long>::has_quiet_NaN; 332 const bool numeric_limits<unsigned long>::has_signaling_NaN; 333 const float_denorm_style numeric_limits<unsigned long>::has_denorm; 334 const bool numeric_limits<unsigned long>::has_denorm_loss; 335 const bool numeric_limits<unsigned long>::is_iec559; 336 const bool numeric_limits<unsigned long>::is_bounded; 337 const bool numeric_limits<unsigned long>::is_modulo; 338 const bool numeric_limits<unsigned long>::traps; 339 const bool numeric_limits<unsigned long>::tinyness_before; 340 const float_round_style numeric_limits<unsigned long>::round_style; 341 342 // NOTA BENE: long long is an extension 343 const bool numeric_limits<long long>::is_specialized; 344 const int numeric_limits<long long>::digits; 345 const int numeric_limits<long long>::digits10; 346 const int numeric_limits<long long>::max_digits10; 347 const bool numeric_limits<long long>::is_signed; 348 const bool numeric_limits<long long>::is_integer; 349 const bool numeric_limits<long long>::is_exact; 350 const int numeric_limits<long long>::radix; 351 const int numeric_limits<long long>::min_exponent; 352 const int numeric_limits<long long>::min_exponent10; 353 const int numeric_limits<long long>::max_exponent; 354 const int numeric_limits<long long>::max_exponent10; 355 const bool numeric_limits<long long>::has_infinity; 356 const bool numeric_limits<long long>::has_quiet_NaN; 357 const bool numeric_limits<long long>::has_signaling_NaN; 358 const float_denorm_style numeric_limits<long long>::has_denorm; 359 const bool numeric_limits<long long>::has_denorm_loss; 360 const bool numeric_limits<long long>::is_iec559; 361 const bool numeric_limits<long long>::is_bounded; 362 const bool numeric_limits<long long>::is_modulo; 363 const bool numeric_limits<long long>::traps; 364 const bool numeric_limits<long long>::tinyness_before; 365 const float_round_style numeric_limits<long long>::round_style; 366 367 const bool numeric_limits<unsigned long long>::is_specialized; 368 const int numeric_limits<unsigned long long>::digits; 369 const int numeric_limits<unsigned long long>::digits10; 370 const int numeric_limits<unsigned long long>::max_digits10; 371 const bool numeric_limits<unsigned long long>::is_signed; 372 const bool numeric_limits<unsigned long long>::is_integer; 373 const bool numeric_limits<unsigned long long>::is_exact; 374 const int numeric_limits<unsigned long long>::radix; 375 const int numeric_limits<unsigned long long>::min_exponent; 376 const int numeric_limits<unsigned long long>::min_exponent10; 377 const int numeric_limits<unsigned long long>::max_exponent; 378 const int numeric_limits<unsigned long long>::max_exponent10; 379 const bool numeric_limits<unsigned long long>::has_infinity; 380 const bool numeric_limits<unsigned long long>::has_quiet_NaN; 381 const bool numeric_limits<unsigned long long>::has_signaling_NaN; 382 const float_denorm_style numeric_limits<unsigned long long>::has_denorm; 383 const bool numeric_limits<unsigned long long>::has_denorm_loss; 384 const bool numeric_limits<unsigned long long>::is_iec559; 385 const bool numeric_limits<unsigned long long>::is_bounded; 386 const bool numeric_limits<unsigned long long>::is_modulo; 387 const bool numeric_limits<unsigned long long>::traps; 388 const bool numeric_limits<unsigned long long>::tinyness_before; 389 const float_round_style numeric_limits<unsigned long long>::round_style; 390 391 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128) 392 const bool numeric_limits<__int128>::is_specialized; 393 const int numeric_limits<__int128>::digits; 394 const int numeric_limits<__int128>::digits10; 395 const int numeric_limits<__int128>::max_digits10; 396 const bool numeric_limits<__int128>::is_signed; 397 const bool numeric_limits<__int128>::is_integer; 398 const bool numeric_limits<__int128>::is_exact; 399 const int numeric_limits<__int128>::radix; 400 const int numeric_limits<__int128>::min_exponent; 401 const int numeric_limits<__int128>::min_exponent10; 402 const int numeric_limits<__int128>::max_exponent; 403 const int numeric_limits<__int128>::max_exponent10; 404 const bool numeric_limits<__int128>::has_infinity; 405 const bool numeric_limits<__int128>::has_quiet_NaN; 406 const bool numeric_limits<__int128>::has_signaling_NaN; 407 const float_denorm_style numeric_limits<__int128>::has_denorm; 408 const bool numeric_limits<__int128>::has_denorm_loss; 409 const bool numeric_limits<__int128>::is_iec559; 410 const bool numeric_limits<__int128>::is_bounded; 411 const bool numeric_limits<__int128>::is_modulo; 412 const bool numeric_limits<__int128>::traps; 413 const bool numeric_limits<__int128>::tinyness_before; 414 const float_round_style numeric_limits<__int128>::round_style; 415 416 const bool numeric_limits<unsigned __int128>::is_specialized; 417 const int numeric_limits<unsigned __int128>::digits; 418 const int numeric_limits<unsigned __int128>::digits10; 419 const int numeric_limits<unsigned __int128>::max_digits10; 420 const bool numeric_limits<unsigned __int128>::is_signed; 421 const bool numeric_limits<unsigned __int128>::is_integer; 422 const bool numeric_limits<unsigned __int128>::is_exact; 423 const int numeric_limits<unsigned __int128>::radix; 424 const int numeric_limits<unsigned __int128>::min_exponent; 425 const int numeric_limits<unsigned __int128>::min_exponent10; 426 const int numeric_limits<unsigned __int128>::max_exponent; 427 const int numeric_limits<unsigned __int128>::max_exponent10; 428 const bool numeric_limits<unsigned __int128>::has_infinity; 429 const bool numeric_limits<unsigned __int128>::has_quiet_NaN; 430 const bool numeric_limits<unsigned __int128>::has_signaling_NaN; 431 const float_denorm_style numeric_limits<unsigned __int128>::has_denorm; 432 const bool numeric_limits<unsigned __int128>::has_denorm_loss; 433 const bool numeric_limits<unsigned __int128>::is_iec559; 434 const bool numeric_limits<unsigned __int128>::is_bounded; 435 const bool numeric_limits<unsigned __int128>::is_modulo; 436 const bool numeric_limits<unsigned __int128>::traps; 437 const bool numeric_limits<unsigned __int128>::tinyness_before; 438 const float_round_style numeric_limits<unsigned __int128>::round_style; 439 #endif 440 441 // float 442 const bool numeric_limits<float>::is_specialized; 443 const int numeric_limits<float>::digits; 444 const int numeric_limits<float>::digits10; 445 const int numeric_limits<float>::max_digits10; 446 const bool numeric_limits<float>::is_signed; 447 const bool numeric_limits<float>::is_integer; 448 const bool numeric_limits<float>::is_exact; 449 const int numeric_limits<float>::radix; 450 const int numeric_limits<float>::min_exponent; 451 const int numeric_limits<float>::min_exponent10; 452 const int numeric_limits<float>::max_exponent; 453 const int numeric_limits<float>::max_exponent10; 454 const bool numeric_limits<float>::has_infinity; 455 const bool numeric_limits<float>::has_quiet_NaN; 456 const bool numeric_limits<float>::has_signaling_NaN; 457 const float_denorm_style numeric_limits<float>::has_denorm; 458 const bool numeric_limits<float>::has_denorm_loss; 459 const bool numeric_limits<float>::is_iec559; 460 const bool numeric_limits<float>::is_bounded; 461 const bool numeric_limits<float>::is_modulo; 462 const bool numeric_limits<float>::traps; 463 const bool numeric_limits<float>::tinyness_before; 464 const float_round_style numeric_limits<float>::round_style; 465 466 // double 467 const bool numeric_limits<double>::is_specialized; 468 const int numeric_limits<double>::digits; 469 const int numeric_limits<double>::digits10; 470 const int numeric_limits<double>::max_digits10; 471 const bool numeric_limits<double>::is_signed; 472 const bool numeric_limits<double>::is_integer; 473 const bool numeric_limits<double>::is_exact; 474 const int numeric_limits<double>::radix; 475 const int numeric_limits<double>::min_exponent; 476 const int numeric_limits<double>::min_exponent10; 477 const int numeric_limits<double>::max_exponent; 478 const int numeric_limits<double>::max_exponent10; 479 const bool numeric_limits<double>::has_infinity; 480 const bool numeric_limits<double>::has_quiet_NaN; 481 const bool numeric_limits<double>::has_signaling_NaN; 482 const float_denorm_style numeric_limits<double>::has_denorm; 483 const bool numeric_limits<double>::has_denorm_loss; 484 const bool numeric_limits<double>::is_iec559; 485 const bool numeric_limits<double>::is_bounded; 486 const bool numeric_limits<double>::is_modulo; 487 const bool numeric_limits<double>::traps; 488 const bool numeric_limits<double>::tinyness_before; 489 const float_round_style numeric_limits<double>::round_style; 490 491 // long double 492 const bool numeric_limits<long double>::is_specialized; 493 const int numeric_limits<long double>::digits; 494 const int numeric_limits<long double>::digits10; 495 const int numeric_limits<long double>::max_digits10; 496 const bool numeric_limits<long double>::is_signed; 497 const bool numeric_limits<long double>::is_integer; 498 const bool numeric_limits<long double>::is_exact; 499 const int numeric_limits<long double>::radix; 500 const int numeric_limits<long double>::min_exponent; 501 const int numeric_limits<long double>::min_exponent10; 502 const int numeric_limits<long double>::max_exponent; 503 const int numeric_limits<long double>::max_exponent10; 504 const bool numeric_limits<long double>::has_infinity; 505 const bool numeric_limits<long double>::has_quiet_NaN; 506 const bool numeric_limits<long double>::has_signaling_NaN; 507 const float_denorm_style numeric_limits<long double>::has_denorm; 508 const bool numeric_limits<long double>::has_denorm_loss; 509 const bool numeric_limits<long double>::is_iec559; 510 const bool numeric_limits<long double>::is_bounded; 511 const bool numeric_limits<long double>::is_modulo; 512 const bool numeric_limits<long double>::traps; 513 const bool numeric_limits<long double>::tinyness_before; 514 const float_round_style numeric_limits<long double>::round_style; 515 516 // char16_t 517 const bool numeric_limits<char16_t>::is_specialized; 518 const int numeric_limits<char16_t>::digits; 519 const int numeric_limits<char16_t>::digits10; 520 const int numeric_limits<char16_t>::max_digits10; 521 const bool numeric_limits<char16_t>::is_signed; 522 const bool numeric_limits<char16_t>::is_integer; 523 const bool numeric_limits<char16_t>::is_exact; 524 const int numeric_limits<char16_t>::radix; 525 const int numeric_limits<char16_t>::min_exponent; 526 const int numeric_limits<char16_t>::min_exponent10; 527 const int numeric_limits<char16_t>::max_exponent; 528 const int numeric_limits<char16_t>::max_exponent10; 529 const bool numeric_limits<char16_t>::has_infinity; 530 const bool numeric_limits<char16_t>::has_quiet_NaN; 531 const bool numeric_limits<char16_t>::has_signaling_NaN; 532 const float_denorm_style numeric_limits<char16_t>::has_denorm; 533 const bool numeric_limits<char16_t>::has_denorm_loss; 534 const bool numeric_limits<char16_t>::is_iec559; 535 const bool numeric_limits<char16_t>::is_bounded; 536 const bool numeric_limits<char16_t>::is_modulo; 537 const bool numeric_limits<char16_t>::traps; 538 const bool numeric_limits<char16_t>::tinyness_before; 539 const float_round_style numeric_limits<char16_t>::round_style; 540 541 // char32_t 542 const bool numeric_limits<char32_t>::is_specialized; 543 const int numeric_limits<char32_t>::digits; 544 const int numeric_limits<char32_t>::digits10; 545 const int numeric_limits<char32_t>::max_digits10; 546 const bool numeric_limits<char32_t>::is_signed; 547 const bool numeric_limits<char32_t>::is_integer; 548 const bool numeric_limits<char32_t>::is_exact; 549 const int numeric_limits<char32_t>::radix; 550 const int numeric_limits<char32_t>::min_exponent; 551 const int numeric_limits<char32_t>::min_exponent10; 552 const int numeric_limits<char32_t>::max_exponent; 553 const int numeric_limits<char32_t>::max_exponent10; 554 const bool numeric_limits<char32_t>::has_infinity; 555 const bool numeric_limits<char32_t>::has_quiet_NaN; 556 const bool numeric_limits<char32_t>::has_signaling_NaN; 557 const float_denorm_style numeric_limits<char32_t>::has_denorm; 558 const bool numeric_limits<char32_t>::has_denorm_loss; 559 const bool numeric_limits<char32_t>::is_iec559; 560 const bool numeric_limits<char32_t>::is_bounded; 561 const bool numeric_limits<char32_t>::is_modulo; 562 const bool numeric_limits<char32_t>::traps; 563 const bool numeric_limits<char32_t>::tinyness_before; 564 const float_round_style numeric_limits<char32_t>::round_style; 565 566 #undef const 567 568 _GLIBCXX_END_NAMESPACE_VERSION 569 } // namespace 570 571 // XXX GLIBCXX_ABI Deprecated 572 #ifdef _GLIBCXX_LONG_DOUBLE_COMPAT 573 574 #define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \ 575 extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \ 576 __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E"))) 577 _GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14); 578 _GLIBCXX_NUM_LIM_COMPAT (int, digits, 6); 579 _GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8); 580 _GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9); 581 _GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10); 582 _GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8); 583 _GLIBCXX_NUM_LIM_COMPAT (int, radix, 5); 584 _GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12); 585 _GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14); 586 _GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12); 587 _GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14); 588 _GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12); 589 _GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13); 590 _GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17); 591 _GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10); 592 _GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15); 593 _GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9); 594 _GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10); 595 _GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9); 596 _GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5); 597 _GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15); 598 _GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11); 599 600 #endif // _GLIBCXX_LONG_DOUBLE_COMPAT 601