1 // Static data members of -*- C++ -*- numeric_limits classes 2 3 // Copyright (C) 1999, 2001, 2002 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 2, 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 // You should have received a copy of the GNU General Public License along 17 // with this library; see the file COPYING. If not, write to the Free 18 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 19 // USA. 20 21 // As a special exception, you may use this file as part of a free software 22 // library without restriction. Specifically, if other files instantiate 23 // templates or use macros or inline functions from this file, or you compile 24 // this file and link it with other files to produce an executable, this 25 // file does not by itself cause the resulting executable to be covered by 26 // the GNU General Public License. This exception does not however 27 // invalidate any other reasons why the executable file might be covered by 28 // the GNU General Public License. 29 30 // Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr> 31 32 // 33 // ISO C++ 14882:1998 34 // 18.2.1 35 // 36 37 #include <limits> 38 39 namespace std 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 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 bool numeric_limits<bool>::is_signed; 69 const bool numeric_limits<bool>::is_integer; 70 const bool numeric_limits<bool>::is_exact; 71 const int numeric_limits<bool>::radix; 72 const int numeric_limits<bool>::min_exponent; 73 const int numeric_limits<bool>::min_exponent10; 74 const int numeric_limits<bool>::max_exponent; 75 const int numeric_limits<bool>::max_exponent10; 76 const bool numeric_limits<bool>::has_infinity; 77 const bool numeric_limits<bool>::has_quiet_NaN; 78 const bool numeric_limits<bool>::has_signaling_NaN; 79 const float_denorm_style numeric_limits<bool>::has_denorm; 80 const bool numeric_limits<bool>::has_denorm_loss; 81 const bool numeric_limits<bool>::is_iec559; 82 const bool numeric_limits<bool>::is_bounded; 83 const bool numeric_limits<bool>::is_modulo; 84 const bool numeric_limits<bool>::traps; 85 const bool numeric_limits<bool>::tinyness_before; 86 const float_round_style numeric_limits<bool>::round_style; 87 88 // char 89 const bool numeric_limits<char>::is_specialized; 90 const int numeric_limits<char>::digits; 91 const int numeric_limits<char>::digits10; 92 const bool numeric_limits<char>::is_signed; 93 const bool numeric_limits<char>::is_integer; 94 const bool numeric_limits<char>::is_exact; 95 const int numeric_limits<char>::radix; 96 const int numeric_limits<char>::min_exponent; 97 const int numeric_limits<char>::min_exponent10; 98 const int numeric_limits<char>::max_exponent; 99 const int numeric_limits<char>::max_exponent10; 100 const bool numeric_limits<char>::has_infinity; 101 const bool numeric_limits<char>::has_quiet_NaN; 102 const bool numeric_limits<char>::has_signaling_NaN; 103 const float_denorm_style numeric_limits<char>::has_denorm; 104 const bool numeric_limits<char>::has_denorm_loss; 105 const bool numeric_limits<char>::is_iec559; 106 const bool numeric_limits<char>::is_bounded; 107 const bool numeric_limits<char>::is_modulo; 108 const bool numeric_limits<char>::traps; 109 const bool numeric_limits<char>::tinyness_before; 110 const float_round_style numeric_limits<char>::round_style; 111 112 // signed char 113 const bool numeric_limits<signed char>::is_specialized; 114 const int numeric_limits<signed char>::digits; 115 const int numeric_limits<signed char>::digits10; 116 const bool numeric_limits<signed char>::is_signed; 117 const bool numeric_limits<signed char>::is_integer; 118 const bool numeric_limits<signed char>::is_exact; 119 const int numeric_limits<signed char>::radix; 120 const int numeric_limits<signed char>::min_exponent; 121 const int numeric_limits<signed char>::min_exponent10; 122 const int numeric_limits<signed char>::max_exponent; 123 const int numeric_limits<signed char>::max_exponent10; 124 const bool numeric_limits<signed char>::has_infinity; 125 const bool numeric_limits<signed char>::has_quiet_NaN; 126 const bool numeric_limits<signed char>::has_signaling_NaN; 127 const float_denorm_style numeric_limits<signed char>::has_denorm; 128 const bool numeric_limits<signed char>::has_denorm_loss; 129 const bool numeric_limits<signed char>::is_iec559; 130 const bool numeric_limits<signed char>::is_bounded; 131 const bool numeric_limits<signed char>::is_modulo; 132 const bool numeric_limits<signed char>::traps; 133 const bool numeric_limits<signed char>::tinyness_before; 134 const float_round_style numeric_limits<signed char>::round_style; 135 136 // unsigned char 137 const bool numeric_limits<unsigned char>::is_specialized; 138 const int numeric_limits<unsigned char>::digits; 139 const int numeric_limits<unsigned char>::digits10; 140 const bool numeric_limits<unsigned char>::is_signed; 141 const bool numeric_limits<unsigned char>::is_integer; 142 const bool numeric_limits<unsigned char>::is_exact; 143 const int numeric_limits<unsigned char>::radix; 144 const int numeric_limits<unsigned char>::min_exponent; 145 const int numeric_limits<unsigned char>::min_exponent10; 146 const int numeric_limits<unsigned char>::max_exponent; 147 const int numeric_limits<unsigned char>::max_exponent10; 148 const bool numeric_limits<unsigned char>::has_infinity; 149 const bool numeric_limits<unsigned char>::has_quiet_NaN; 150 const bool numeric_limits<unsigned char>::has_signaling_NaN; 151 const float_denorm_style numeric_limits<unsigned char>::has_denorm; 152 const bool numeric_limits<unsigned char>::has_denorm_loss; 153 const bool numeric_limits<unsigned char>::is_iec559; 154 const bool numeric_limits<unsigned char>::is_bounded; 155 const bool numeric_limits<unsigned char>::is_modulo; 156 const bool numeric_limits<unsigned char>::traps; 157 const bool numeric_limits<unsigned char>::tinyness_before; 158 const float_round_style numeric_limits<unsigned char>::round_style; 159 160 // wchar_t 161 // This used to be problematic... 162 #if defined(_GLIBCPP_USE_WCHAR_T) || defined(_GLIBCPP_USE_TYPE_WCHAR_T) 163 const bool numeric_limits<wchar_t>::is_specialized; 164 const int numeric_limits<wchar_t>::digits; 165 const int numeric_limits<wchar_t>::digits10; 166 const bool numeric_limits<wchar_t>::is_signed; 167 const bool numeric_limits<wchar_t>::is_integer; 168 const bool numeric_limits<wchar_t>::is_exact; 169 const int numeric_limits<wchar_t>::radix; 170 const int numeric_limits<wchar_t>::min_exponent; 171 const int numeric_limits<wchar_t>::min_exponent10; 172 const int numeric_limits<wchar_t>::max_exponent; 173 const int numeric_limits<wchar_t>::max_exponent10; 174 const bool numeric_limits<wchar_t>::has_infinity; 175 const bool numeric_limits<wchar_t>::has_quiet_NaN; 176 const bool numeric_limits<wchar_t>::has_signaling_NaN; 177 const float_denorm_style numeric_limits<wchar_t>::has_denorm; 178 const bool numeric_limits<wchar_t>::has_denorm_loss; 179 const bool numeric_limits<wchar_t>::is_iec559; 180 const bool numeric_limits<wchar_t>::is_bounded; 181 const bool numeric_limits<wchar_t>::is_modulo; 182 const bool numeric_limits<wchar_t>::traps; 183 const bool numeric_limits<wchar_t>::tinyness_before; 184 const float_round_style numeric_limits<wchar_t>::round_style; 185 #endif // _GLIBCPP_USE_WCHAR_T 186 187 // short 188 const bool numeric_limits<short>::is_specialized; 189 const int numeric_limits<short>::digits; 190 const int numeric_limits<short>::digits10; 191 const bool numeric_limits<short>::is_signed; 192 const bool numeric_limits<short>::is_integer; 193 const bool numeric_limits<short>::is_exact; 194 const int numeric_limits<short>::radix; 195 const int numeric_limits<short>::min_exponent; 196 const int numeric_limits<short>::min_exponent10; 197 const int numeric_limits<short>::max_exponent; 198 const int numeric_limits<short>::max_exponent10; 199 const bool numeric_limits<short>::has_infinity; 200 const bool numeric_limits<short>::has_quiet_NaN; 201 const bool numeric_limits<short>::has_signaling_NaN; 202 const float_denorm_style numeric_limits<short>::has_denorm; 203 const bool numeric_limits<short>::has_denorm_loss; 204 const bool numeric_limits<short>::is_iec559; 205 const bool numeric_limits<short>::is_bounded; 206 const bool numeric_limits<short>::is_modulo; 207 const bool numeric_limits<short>::traps; 208 const bool numeric_limits<short>::tinyness_before; 209 const float_round_style numeric_limits<short>::round_style; 210 211 // unsigned short 212 const bool numeric_limits<unsigned short>::is_specialized; 213 const int numeric_limits<unsigned short>::digits; 214 const int numeric_limits<unsigned short>::digits10; 215 const bool numeric_limits<unsigned short>::is_signed; 216 const bool numeric_limits<unsigned short>::is_integer; 217 const bool numeric_limits<unsigned short>::is_exact; 218 const int numeric_limits<unsigned short>::radix; 219 const int numeric_limits<unsigned short>::min_exponent; 220 const int numeric_limits<unsigned short>::min_exponent10; 221 const int numeric_limits<unsigned short>::max_exponent; 222 const int numeric_limits<unsigned short>::max_exponent10; 223 const bool numeric_limits<unsigned short>::has_infinity; 224 const bool numeric_limits<unsigned short>::has_quiet_NaN; 225 const bool numeric_limits<unsigned short>::has_signaling_NaN; 226 const float_denorm_style numeric_limits<unsigned short>::has_denorm; 227 const bool numeric_limits<unsigned short>::has_denorm_loss; 228 const bool numeric_limits<unsigned short>::is_iec559; 229 const bool numeric_limits<unsigned short>::is_bounded; 230 const bool numeric_limits<unsigned short>::is_modulo; 231 const bool numeric_limits<unsigned short>::traps; 232 const bool numeric_limits<unsigned short>::tinyness_before; 233 const float_round_style numeric_limits<unsigned short>::round_style; 234 235 // int 236 const bool numeric_limits<int>::is_specialized; 237 const int numeric_limits<int>::digits; 238 const int numeric_limits<int>::digits10; 239 const bool numeric_limits<int>::is_signed; 240 const bool numeric_limits<int>::is_integer; 241 const bool numeric_limits<int>::is_exact; 242 const int numeric_limits<int>::radix; 243 const int numeric_limits<int>::min_exponent; 244 const int numeric_limits<int>::min_exponent10; 245 const int numeric_limits<int>::max_exponent; 246 const int numeric_limits<int>::max_exponent10; 247 const bool numeric_limits<int>::has_infinity; 248 const bool numeric_limits<int>::has_quiet_NaN; 249 const bool numeric_limits<int>::has_signaling_NaN; 250 const float_denorm_style numeric_limits<int>::has_denorm; 251 const bool numeric_limits<int>::has_denorm_loss; 252 const bool numeric_limits<int>::is_iec559; 253 const bool numeric_limits<int>::is_bounded; 254 const bool numeric_limits<int>::is_modulo; 255 const bool numeric_limits<int>::traps; 256 const bool numeric_limits<int>::tinyness_before; 257 const float_round_style numeric_limits<int>::round_style; 258 259 // unsigned int 260 const bool numeric_limits<unsigned int>::is_specialized; 261 const int numeric_limits<unsigned int>::digits; 262 const int numeric_limits<unsigned int>::digits10; 263 const bool numeric_limits<unsigned int>::is_signed; 264 const bool numeric_limits<unsigned int>::is_integer; 265 const bool numeric_limits<unsigned int>::is_exact; 266 const int numeric_limits<unsigned int>::radix; 267 const int numeric_limits<unsigned int>::min_exponent; 268 const int numeric_limits<unsigned int>::min_exponent10; 269 const int numeric_limits<unsigned int>::max_exponent; 270 const int numeric_limits<unsigned int>::max_exponent10; 271 const bool numeric_limits<unsigned int>::has_infinity; 272 const bool numeric_limits<unsigned int>::has_quiet_NaN; 273 const bool numeric_limits<unsigned int>::has_signaling_NaN; 274 const float_denorm_style numeric_limits<unsigned int>::has_denorm; 275 const bool numeric_limits<unsigned int>::has_denorm_loss; 276 const bool numeric_limits<unsigned int>::is_iec559; 277 const bool numeric_limits<unsigned int>::is_bounded; 278 const bool numeric_limits<unsigned int>::is_modulo; 279 const bool numeric_limits<unsigned int>::traps; 280 const bool numeric_limits<unsigned int>::tinyness_before; 281 const float_round_style numeric_limits<unsigned int>::round_style; 282 283 // long 284 const bool numeric_limits<long>::is_specialized; 285 const int numeric_limits<long>::digits; 286 const int numeric_limits<long>::digits10; 287 const bool numeric_limits<long>::is_signed; 288 const bool numeric_limits<long>::is_integer; 289 const bool numeric_limits<long>::is_exact; 290 const int numeric_limits<long>::radix; 291 const int numeric_limits<long>::min_exponent; 292 const int numeric_limits<long>::min_exponent10; 293 const int numeric_limits<long>::max_exponent; 294 const int numeric_limits<long>::max_exponent10; 295 const bool numeric_limits<long>::has_infinity; 296 const bool numeric_limits<long>::has_quiet_NaN; 297 const bool numeric_limits<long>::has_signaling_NaN; 298 const float_denorm_style numeric_limits<long>::has_denorm; 299 const bool numeric_limits<long>::has_denorm_loss; 300 const bool numeric_limits<long>::is_iec559; 301 const bool numeric_limits<long>::is_bounded; 302 const bool numeric_limits<long>::is_modulo; 303 const bool numeric_limits<long>::traps; 304 const bool numeric_limits<long>::tinyness_before; 305 const float_round_style numeric_limits<long>::round_style; 306 307 // unsigned long 308 const bool numeric_limits<unsigned long>::is_specialized; 309 const int numeric_limits<unsigned long>::digits; 310 const int numeric_limits<unsigned long>::digits10; 311 const bool numeric_limits<unsigned long>::is_signed; 312 const bool numeric_limits<unsigned long>::is_integer; 313 const bool numeric_limits<unsigned long>::is_exact; 314 const int numeric_limits<unsigned long>::radix; 315 const int numeric_limits<unsigned long>::min_exponent; 316 const int numeric_limits<unsigned long>::min_exponent10; 317 const int numeric_limits<unsigned long>::max_exponent; 318 const int numeric_limits<unsigned long>::max_exponent10; 319 const bool numeric_limits<unsigned long>::has_infinity; 320 const bool numeric_limits<unsigned long>::has_quiet_NaN; 321 const bool numeric_limits<unsigned long>::has_signaling_NaN; 322 const float_denorm_style numeric_limits<unsigned long>::has_denorm; 323 const bool numeric_limits<unsigned long>::has_denorm_loss; 324 const bool numeric_limits<unsigned long>::is_iec559; 325 const bool numeric_limits<unsigned long>::is_bounded; 326 const bool numeric_limits<unsigned long>::is_modulo; 327 const bool numeric_limits<unsigned long>::traps; 328 const bool numeric_limits<unsigned long>::tinyness_before; 329 const float_round_style numeric_limits<unsigned long>::round_style; 330 331 // NOTA BENE: long long is an extension 332 const bool numeric_limits<long long>::is_specialized; 333 const int numeric_limits<long long>::digits; 334 const int numeric_limits<long long>::digits10; 335 const bool numeric_limits<long long>::is_signed; 336 const bool numeric_limits<long long>::is_integer; 337 const bool numeric_limits<long long>::is_exact; 338 const int numeric_limits<long long>::radix; 339 const int numeric_limits<long long>::min_exponent; 340 const int numeric_limits<long long>::min_exponent10; 341 const int numeric_limits<long long>::max_exponent; 342 const int numeric_limits<long long>::max_exponent10; 343 const bool numeric_limits<long long>::has_infinity; 344 const bool numeric_limits<long long>::has_quiet_NaN; 345 const bool numeric_limits<long long>::has_signaling_NaN; 346 const float_denorm_style numeric_limits<long long>::has_denorm; 347 const bool numeric_limits<long long>::has_denorm_loss; 348 const bool numeric_limits<long long>::is_iec559; 349 const bool numeric_limits<long long>::is_bounded; 350 const bool numeric_limits<long long>::is_modulo; 351 const bool numeric_limits<long long>::traps; 352 const bool numeric_limits<long long>::tinyness_before; 353 const float_round_style numeric_limits<long long>::round_style; 354 355 const bool numeric_limits<unsigned long long>::is_specialized; 356 const int numeric_limits<unsigned long long>::digits; 357 const int numeric_limits<unsigned long long>::digits10; 358 const bool numeric_limits<unsigned long long>::is_signed; 359 const bool numeric_limits<unsigned long long>::is_integer; 360 const bool numeric_limits<unsigned long long>::is_exact; 361 const int numeric_limits<unsigned long long>::radix; 362 const int numeric_limits<unsigned long long>::min_exponent; 363 const int numeric_limits<unsigned long long>::min_exponent10; 364 const int numeric_limits<unsigned long long>::max_exponent; 365 const int numeric_limits<unsigned long long>::max_exponent10; 366 const bool numeric_limits<unsigned long long>::has_infinity; 367 const bool numeric_limits<unsigned long long>::has_quiet_NaN; 368 const bool numeric_limits<unsigned long long>::has_signaling_NaN; 369 const float_denorm_style numeric_limits<unsigned long long>::has_denorm; 370 const bool numeric_limits<unsigned long long>::has_denorm_loss; 371 const bool numeric_limits<unsigned long long>::is_iec559; 372 const bool numeric_limits<unsigned long long>::is_bounded; 373 const bool numeric_limits<unsigned long long>::is_modulo; 374 const bool numeric_limits<unsigned long long>::traps; 375 const bool numeric_limits<unsigned long long>::tinyness_before; 376 const float_round_style numeric_limits<unsigned long long>::round_style; 377 378 // float 379 const bool numeric_limits<float>::is_specialized; 380 const int numeric_limits<float>::digits; 381 const int numeric_limits<float>::digits10; 382 const bool numeric_limits<float>::is_signed; 383 const bool numeric_limits<float>::is_integer; 384 const bool numeric_limits<float>::is_exact; 385 const int numeric_limits<float>::radix; 386 const int numeric_limits<float>::min_exponent; 387 const int numeric_limits<float>::min_exponent10; 388 const int numeric_limits<float>::max_exponent; 389 const int numeric_limits<float>::max_exponent10; 390 const bool numeric_limits<float>::has_infinity; 391 const bool numeric_limits<float>::has_quiet_NaN; 392 const bool numeric_limits<float>::has_signaling_NaN; 393 const float_denorm_style numeric_limits<float>::has_denorm; 394 const bool numeric_limits<float>::has_denorm_loss; 395 const bool numeric_limits<float>::is_iec559; 396 const bool numeric_limits<float>::is_bounded; 397 const bool numeric_limits<float>::is_modulo; 398 const bool numeric_limits<float>::traps; 399 const bool numeric_limits<float>::tinyness_before; 400 const float_round_style numeric_limits<float>::round_style; 401 402 // double 403 const bool numeric_limits<double>::is_specialized; 404 const int numeric_limits<double>::digits; 405 const int numeric_limits<double>::digits10; 406 const bool numeric_limits<double>::is_signed; 407 const bool numeric_limits<double>::is_integer; 408 const bool numeric_limits<double>::is_exact; 409 const int numeric_limits<double>::radix; 410 const int numeric_limits<double>::min_exponent; 411 const int numeric_limits<double>::min_exponent10; 412 const int numeric_limits<double>::max_exponent; 413 const int numeric_limits<double>::max_exponent10; 414 const bool numeric_limits<double>::has_infinity; 415 const bool numeric_limits<double>::has_quiet_NaN; 416 const bool numeric_limits<double>::has_signaling_NaN; 417 const float_denorm_style numeric_limits<double>::has_denorm; 418 const bool numeric_limits<double>::has_denorm_loss; 419 const bool numeric_limits<double>::is_iec559; 420 const bool numeric_limits<double>::is_bounded; 421 const bool numeric_limits<double>::is_modulo; 422 const bool numeric_limits<double>::traps; 423 const bool numeric_limits<double>::tinyness_before; 424 const float_round_style numeric_limits<double>::round_style; 425 426 // long double 427 const bool numeric_limits<long double>::is_specialized; 428 const int numeric_limits<long double>::digits; 429 const int numeric_limits<long double>::digits10; 430 const bool numeric_limits<long double>::is_signed; 431 const bool numeric_limits<long double>::is_integer; 432 const bool numeric_limits<long double>::is_exact; 433 const int numeric_limits<long double>::radix; 434 const int numeric_limits<long double>::min_exponent; 435 const int numeric_limits<long double>::min_exponent10; 436 const int numeric_limits<long double>::max_exponent; 437 const int numeric_limits<long double>::max_exponent10; 438 const bool numeric_limits<long double>::has_infinity; 439 const bool numeric_limits<long double>::has_quiet_NaN; 440 const bool numeric_limits<long double>::has_signaling_NaN; 441 const float_denorm_style numeric_limits<long double>::has_denorm; 442 const bool numeric_limits<long double>::has_denorm_loss; 443 const bool numeric_limits<long double>::is_iec559; 444 const bool numeric_limits<long double>::is_bounded; 445 const bool numeric_limits<long double>::is_modulo; 446 const bool numeric_limits<long double>::traps; 447 const bool numeric_limits<long double>::tinyness_before; 448 const float_round_style numeric_limits<long double>::round_style; 449 } // namespace std 450