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