1 // Static data members of -*- C++ -*- numeric_limits classes 2 3 // Copyright (C) 1999-2020 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 #define INT_N(__INT_N_TYPE) \ 392 const bool numeric_limits<__INT_N_TYPE>::is_specialized; \ 393 const int numeric_limits<__INT_N_TYPE>::digits; \ 394 const int numeric_limits<__INT_N_TYPE>::digits10; \ 395 const int numeric_limits<__INT_N_TYPE>::max_digits10; \ 396 const bool numeric_limits<__INT_N_TYPE>::is_signed; \ 397 const bool numeric_limits<__INT_N_TYPE>::is_integer; \ 398 const bool numeric_limits<__INT_N_TYPE>::is_exact; \ 399 const int numeric_limits<__INT_N_TYPE>::radix; \ 400 const int numeric_limits<__INT_N_TYPE>::min_exponent; \ 401 const int numeric_limits<__INT_N_TYPE>::min_exponent10; \ 402 const int numeric_limits<__INT_N_TYPE>::max_exponent; \ 403 const int numeric_limits<__INT_N_TYPE>::max_exponent10; \ 404 const bool numeric_limits<__INT_N_TYPE>::has_infinity; \ 405 const bool numeric_limits<__INT_N_TYPE>::has_quiet_NaN; \ 406 const bool numeric_limits<__INT_N_TYPE>::has_signaling_NaN; \ 407 const float_denorm_style numeric_limits<__INT_N_TYPE>::has_denorm; \ 408 const bool numeric_limits<__INT_N_TYPE>::has_denorm_loss; \ 409 const bool numeric_limits<__INT_N_TYPE>::is_iec559; \ 410 const bool numeric_limits<__INT_N_TYPE>::is_bounded; \ 411 const bool numeric_limits<__INT_N_TYPE>::is_modulo; \ 412 const bool numeric_limits<__INT_N_TYPE>::traps; \ 413 const bool numeric_limits<__INT_N_TYPE>::tinyness_before; \ 414 const float_round_style numeric_limits<__INT_N_TYPE>::round_style; \ 415 \ 416 const bool numeric_limits<unsigned __INT_N_TYPE>::is_specialized; \ 417 const int numeric_limits<unsigned __INT_N_TYPE>::digits; \ 418 const int numeric_limits<unsigned __INT_N_TYPE>::digits10; \ 419 const int numeric_limits<unsigned __INT_N_TYPE>::max_digits10; \ 420 const bool numeric_limits<unsigned __INT_N_TYPE>::is_signed; \ 421 const bool numeric_limits<unsigned __INT_N_TYPE>::is_integer; \ 422 const bool numeric_limits<unsigned __INT_N_TYPE>::is_exact; \ 423 const int numeric_limits<unsigned __INT_N_TYPE>::radix; \ 424 const int numeric_limits<unsigned __INT_N_TYPE>::min_exponent; \ 425 const int numeric_limits<unsigned __INT_N_TYPE>::min_exponent10; \ 426 const int numeric_limits<unsigned __INT_N_TYPE>::max_exponent; \ 427 const int numeric_limits<unsigned __INT_N_TYPE>::max_exponent10; \ 428 const bool numeric_limits<unsigned __INT_N_TYPE>::has_infinity; \ 429 const bool numeric_limits<unsigned __INT_N_TYPE>::has_quiet_NaN; \ 430 const bool numeric_limits<unsigned __INT_N_TYPE>::has_signaling_NaN; \ 431 const float_denorm_style numeric_limits<unsigned __INT_N_TYPE>::has_denorm; \ 432 const bool numeric_limits<unsigned __INT_N_TYPE>::has_denorm_loss; \ 433 const bool numeric_limits<unsigned __INT_N_TYPE>::is_iec559; \ 434 const bool numeric_limits<unsigned __INT_N_TYPE>::is_bounded; \ 435 const bool numeric_limits<unsigned __INT_N_TYPE>::is_modulo; \ 436 const bool numeric_limits<unsigned __INT_N_TYPE>::traps; \ 437 const bool numeric_limits<unsigned __INT_N_TYPE>::tinyness_before; \ 438 const float_round_style numeric_limits<unsigned __INT_N_TYPE>::round_style; 439 440 #ifdef __GLIBCXX_TYPE_INT_N_0 441 INT_N (__GLIBCXX_TYPE_INT_N_0) 442 #endif 443 #ifdef __GLIBCXX_TYPE_INT_N_1 444 INT_N (__GLIBCXX_TYPE_INT_N_1) 445 #endif 446 #ifdef __GLIBCXX_TYPE_INT_N_2 447 INT_N (__GLIBCXX_TYPE_INT_N_2) 448 #endif 449 #ifdef __GLIBCXX_TYPE_INT_N_3 450 INT_N (__GLIBCXX_TYPE_INT_N_3) 451 #endif 452 453 // float 454 const bool numeric_limits<float>::is_specialized; 455 const int numeric_limits<float>::digits; 456 const int numeric_limits<float>::digits10; 457 const int numeric_limits<float>::max_digits10; 458 const bool numeric_limits<float>::is_signed; 459 const bool numeric_limits<float>::is_integer; 460 const bool numeric_limits<float>::is_exact; 461 const int numeric_limits<float>::radix; 462 const int numeric_limits<float>::min_exponent; 463 const int numeric_limits<float>::min_exponent10; 464 const int numeric_limits<float>::max_exponent; 465 const int numeric_limits<float>::max_exponent10; 466 const bool numeric_limits<float>::has_infinity; 467 const bool numeric_limits<float>::has_quiet_NaN; 468 const bool numeric_limits<float>::has_signaling_NaN; 469 const float_denorm_style numeric_limits<float>::has_denorm; 470 const bool numeric_limits<float>::has_denorm_loss; 471 const bool numeric_limits<float>::is_iec559; 472 const bool numeric_limits<float>::is_bounded; 473 const bool numeric_limits<float>::is_modulo; 474 const bool numeric_limits<float>::traps; 475 const bool numeric_limits<float>::tinyness_before; 476 const float_round_style numeric_limits<float>::round_style; 477 478 // double 479 const bool numeric_limits<double>::is_specialized; 480 const int numeric_limits<double>::digits; 481 const int numeric_limits<double>::digits10; 482 const int numeric_limits<double>::max_digits10; 483 const bool numeric_limits<double>::is_signed; 484 const bool numeric_limits<double>::is_integer; 485 const bool numeric_limits<double>::is_exact; 486 const int numeric_limits<double>::radix; 487 const int numeric_limits<double>::min_exponent; 488 const int numeric_limits<double>::min_exponent10; 489 const int numeric_limits<double>::max_exponent; 490 const int numeric_limits<double>::max_exponent10; 491 const bool numeric_limits<double>::has_infinity; 492 const bool numeric_limits<double>::has_quiet_NaN; 493 const bool numeric_limits<double>::has_signaling_NaN; 494 const float_denorm_style numeric_limits<double>::has_denorm; 495 const bool numeric_limits<double>::has_denorm_loss; 496 const bool numeric_limits<double>::is_iec559; 497 const bool numeric_limits<double>::is_bounded; 498 const bool numeric_limits<double>::is_modulo; 499 const bool numeric_limits<double>::traps; 500 const bool numeric_limits<double>::tinyness_before; 501 const float_round_style numeric_limits<double>::round_style; 502 503 // long double 504 const bool numeric_limits<long double>::is_specialized; 505 const int numeric_limits<long double>::digits; 506 const int numeric_limits<long double>::digits10; 507 const int numeric_limits<long double>::max_digits10; 508 const bool numeric_limits<long double>::is_signed; 509 const bool numeric_limits<long double>::is_integer; 510 const bool numeric_limits<long double>::is_exact; 511 const int numeric_limits<long double>::radix; 512 const int numeric_limits<long double>::min_exponent; 513 const int numeric_limits<long double>::min_exponent10; 514 const int numeric_limits<long double>::max_exponent; 515 const int numeric_limits<long double>::max_exponent10; 516 const bool numeric_limits<long double>::has_infinity; 517 const bool numeric_limits<long double>::has_quiet_NaN; 518 const bool numeric_limits<long double>::has_signaling_NaN; 519 const float_denorm_style numeric_limits<long double>::has_denorm; 520 const bool numeric_limits<long double>::has_denorm_loss; 521 const bool numeric_limits<long double>::is_iec559; 522 const bool numeric_limits<long double>::is_bounded; 523 const bool numeric_limits<long double>::is_modulo; 524 const bool numeric_limits<long double>::traps; 525 const bool numeric_limits<long double>::tinyness_before; 526 const float_round_style numeric_limits<long double>::round_style; 527 528 #ifdef _GLIBCXX_USE_CHAR8_T 529 // char8_t 530 const bool numeric_limits<char8_t>::is_specialized; 531 const int numeric_limits<char8_t>::digits; 532 const int numeric_limits<char8_t>::digits10; 533 const int numeric_limits<char8_t>::max_digits10; 534 const bool numeric_limits<char8_t>::is_signed; 535 const bool numeric_limits<char8_t>::is_integer; 536 const bool numeric_limits<char8_t>::is_exact; 537 const int numeric_limits<char8_t>::radix; 538 const int numeric_limits<char8_t>::min_exponent; 539 const int numeric_limits<char8_t>::min_exponent10; 540 const int numeric_limits<char8_t>::max_exponent; 541 const int numeric_limits<char8_t>::max_exponent10; 542 const bool numeric_limits<char8_t>::has_infinity; 543 const bool numeric_limits<char8_t>::has_quiet_NaN; 544 const bool numeric_limits<char8_t>::has_signaling_NaN; 545 const float_denorm_style numeric_limits<char8_t>::has_denorm; 546 const bool numeric_limits<char8_t>::has_denorm_loss; 547 const bool numeric_limits<char8_t>::is_iec559; 548 const bool numeric_limits<char8_t>::is_bounded; 549 const bool numeric_limits<char8_t>::is_modulo; 550 const bool numeric_limits<char8_t>::traps; 551 const bool numeric_limits<char8_t>::tinyness_before; 552 const float_round_style numeric_limits<char8_t>::round_style; 553 #endif // _GLIBCXX_USE_CHAR8_T 554 555 // char16_t 556 const bool numeric_limits<char16_t>::is_specialized; 557 const int numeric_limits<char16_t>::digits; 558 const int numeric_limits<char16_t>::digits10; 559 const int numeric_limits<char16_t>::max_digits10; 560 const bool numeric_limits<char16_t>::is_signed; 561 const bool numeric_limits<char16_t>::is_integer; 562 const bool numeric_limits<char16_t>::is_exact; 563 const int numeric_limits<char16_t>::radix; 564 const int numeric_limits<char16_t>::min_exponent; 565 const int numeric_limits<char16_t>::min_exponent10; 566 const int numeric_limits<char16_t>::max_exponent; 567 const int numeric_limits<char16_t>::max_exponent10; 568 const bool numeric_limits<char16_t>::has_infinity; 569 const bool numeric_limits<char16_t>::has_quiet_NaN; 570 const bool numeric_limits<char16_t>::has_signaling_NaN; 571 const float_denorm_style numeric_limits<char16_t>::has_denorm; 572 const bool numeric_limits<char16_t>::has_denorm_loss; 573 const bool numeric_limits<char16_t>::is_iec559; 574 const bool numeric_limits<char16_t>::is_bounded; 575 const bool numeric_limits<char16_t>::is_modulo; 576 const bool numeric_limits<char16_t>::traps; 577 const bool numeric_limits<char16_t>::tinyness_before; 578 const float_round_style numeric_limits<char16_t>::round_style; 579 580 // char32_t 581 const bool numeric_limits<char32_t>::is_specialized; 582 const int numeric_limits<char32_t>::digits; 583 const int numeric_limits<char32_t>::digits10; 584 const int numeric_limits<char32_t>::max_digits10; 585 const bool numeric_limits<char32_t>::is_signed; 586 const bool numeric_limits<char32_t>::is_integer; 587 const bool numeric_limits<char32_t>::is_exact; 588 const int numeric_limits<char32_t>::radix; 589 const int numeric_limits<char32_t>::min_exponent; 590 const int numeric_limits<char32_t>::min_exponent10; 591 const int numeric_limits<char32_t>::max_exponent; 592 const int numeric_limits<char32_t>::max_exponent10; 593 const bool numeric_limits<char32_t>::has_infinity; 594 const bool numeric_limits<char32_t>::has_quiet_NaN; 595 const bool numeric_limits<char32_t>::has_signaling_NaN; 596 const float_denorm_style numeric_limits<char32_t>::has_denorm; 597 const bool numeric_limits<char32_t>::has_denorm_loss; 598 const bool numeric_limits<char32_t>::is_iec559; 599 const bool numeric_limits<char32_t>::is_bounded; 600 const bool numeric_limits<char32_t>::is_modulo; 601 const bool numeric_limits<char32_t>::traps; 602 const bool numeric_limits<char32_t>::tinyness_before; 603 const float_round_style numeric_limits<char32_t>::round_style; 604 605 #undef const 606 607 _GLIBCXX_END_NAMESPACE_VERSION 608 } // namespace 609 610 // XXX GLIBCXX_ABI Deprecated 611 #ifdef _GLIBCXX_LONG_DOUBLE_COMPAT 612 613 #define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \ 614 extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \ 615 __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E"))) 616 _GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14); 617 _GLIBCXX_NUM_LIM_COMPAT (int, digits, 6); 618 _GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8); 619 _GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9); 620 _GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10); 621 _GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8); 622 _GLIBCXX_NUM_LIM_COMPAT (int, radix, 5); 623 _GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12); 624 _GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14); 625 _GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12); 626 _GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14); 627 _GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12); 628 _GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13); 629 _GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17); 630 _GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10); 631 _GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15); 632 _GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9); 633 _GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10); 634 _GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9); 635 _GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5); 636 _GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15); 637 _GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11); 638 639 #endif // _GLIBCXX_LONG_DOUBLE_COMPAT 640