100db7afdSDavid E. O'Brien // Static data members of -*- C++ -*- numeric_limits classes
200db7afdSDavid E. O'Brien 
3*f8a1b7d9SAlexander Kabaev // Copyright (C) 1999, 2001, 2002, 2005, 2006 Free Software Foundation, Inc.
400db7afdSDavid E. O'Brien //
500db7afdSDavid E. O'Brien // This file is part of the GNU ISO C++ Library.  This library is free
600db7afdSDavid E. O'Brien // software; you can redistribute it and/or modify it under the
700db7afdSDavid E. O'Brien // terms of the GNU General Public License as published by the
800db7afdSDavid E. O'Brien // Free Software Foundation; either version 2, or (at your option)
900db7afdSDavid E. O'Brien // any later version.
1000db7afdSDavid E. O'Brien 
1100db7afdSDavid E. O'Brien // This library is distributed in the hope that it will be useful,
1200db7afdSDavid E. O'Brien // but WITHOUT ANY WARRANTY; without even the implied warranty of
1300db7afdSDavid E. O'Brien // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1400db7afdSDavid E. O'Brien // GNU General Public License for more details.
1500db7afdSDavid E. O'Brien 
1600db7afdSDavid E. O'Brien // You should have received a copy of the GNU General Public License along
1700db7afdSDavid E. O'Brien // with this library; see the file COPYING.  If not, write to the Free
18*f8a1b7d9SAlexander Kabaev // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
1900db7afdSDavid E. O'Brien // USA.
2000db7afdSDavid E. O'Brien 
2100db7afdSDavid E. O'Brien // As a special exception, you may use this file as part of a free software
2200db7afdSDavid E. O'Brien // library without restriction.  Specifically, if other files instantiate
2300db7afdSDavid E. O'Brien // templates or use macros or inline functions from this file, or you compile
2400db7afdSDavid E. O'Brien // this file and link it with other files to produce an executable, this
2500db7afdSDavid E. O'Brien // file does not by itself cause the resulting executable to be covered by
2600db7afdSDavid E. O'Brien // the GNU General Public License.  This exception does not however
2700db7afdSDavid E. O'Brien // invalidate any other reasons why the executable file might be covered by
2800db7afdSDavid E. O'Brien // the GNU General Public License.
2900db7afdSDavid E. O'Brien 
3000db7afdSDavid E. O'Brien // Written by Gabriel Dos Reis <[email protected]>
3100db7afdSDavid E. O'Brien 
3200db7afdSDavid E. O'Brien //
3300db7afdSDavid E. O'Brien // ISO C++ 14882:1998
3400db7afdSDavid E. O'Brien // 18.2.1
3500db7afdSDavid E. O'Brien //
3600db7afdSDavid E. O'Brien 
3700db7afdSDavid E. O'Brien #include <limits>
3800db7afdSDavid E. O'Brien 
39*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std)
40*f8a1b7d9SAlexander Kabaev 
4100db7afdSDavid E. O'Brien   const bool __numeric_limits_base::is_specialized;
4200db7afdSDavid E. O'Brien   const int  __numeric_limits_base::digits;
4300db7afdSDavid E. O'Brien   const int  __numeric_limits_base::digits10;
4400db7afdSDavid E. O'Brien   const bool __numeric_limits_base::is_signed;
4500db7afdSDavid E. O'Brien   const bool __numeric_limits_base::is_integer;
4600db7afdSDavid E. O'Brien   const bool __numeric_limits_base::is_exact;
4700db7afdSDavid E. O'Brien   const int  __numeric_limits_base::radix;
4800db7afdSDavid E. O'Brien   const int  __numeric_limits_base::min_exponent;
4900db7afdSDavid E. O'Brien   const int  __numeric_limits_base::min_exponent10;
5000db7afdSDavid E. O'Brien   const int  __numeric_limits_base::max_exponent;
5100db7afdSDavid E. O'Brien   const int  __numeric_limits_base::max_exponent10;
5200db7afdSDavid E. O'Brien   const bool __numeric_limits_base::has_infinity;
5300db7afdSDavid E. O'Brien   const bool __numeric_limits_base::has_quiet_NaN;
5400db7afdSDavid E. O'Brien   const bool __numeric_limits_base::has_signaling_NaN;
5500db7afdSDavid E. O'Brien   const float_denorm_style __numeric_limits_base::has_denorm;
5600db7afdSDavid E. O'Brien   const bool __numeric_limits_base::has_denorm_loss;
5700db7afdSDavid E. O'Brien   const bool __numeric_limits_base::is_iec559;
5800db7afdSDavid E. O'Brien   const bool __numeric_limits_base::is_bounded;
5900db7afdSDavid E. O'Brien   const bool __numeric_limits_base::is_modulo;
6000db7afdSDavid E. O'Brien   const bool __numeric_limits_base::traps;
6100db7afdSDavid E. O'Brien   const bool __numeric_limits_base::tinyness_before;
6200db7afdSDavid E. O'Brien   const float_round_style __numeric_limits_base::round_style;
6300db7afdSDavid E. O'Brien 
6400db7afdSDavid E. O'Brien   // bool
6500db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::is_specialized;
6600db7afdSDavid E. O'Brien   const int  numeric_limits<bool>::digits;
6700db7afdSDavid E. O'Brien   const int  numeric_limits<bool>::digits10;
6800db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::is_signed;
6900db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::is_integer;
7000db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::is_exact;
7100db7afdSDavid E. O'Brien   const int  numeric_limits<bool>::radix;
7200db7afdSDavid E. O'Brien   const int  numeric_limits<bool>::min_exponent;
7300db7afdSDavid E. O'Brien   const int  numeric_limits<bool>::min_exponent10;
7400db7afdSDavid E. O'Brien   const int  numeric_limits<bool>::max_exponent;
7500db7afdSDavid E. O'Brien   const int  numeric_limits<bool>::max_exponent10;
7600db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::has_infinity;
7700db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::has_quiet_NaN;
7800db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::has_signaling_NaN;
7900db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<bool>::has_denorm;
8000db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::has_denorm_loss;
8100db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::is_iec559;
8200db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::is_bounded;
8300db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::is_modulo;
8400db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::traps;
8500db7afdSDavid E. O'Brien   const bool numeric_limits<bool>::tinyness_before;
8600db7afdSDavid E. O'Brien   const float_round_style numeric_limits<bool>::round_style;
8700db7afdSDavid E. O'Brien 
8800db7afdSDavid E. O'Brien   // char
8900db7afdSDavid E. O'Brien   const bool numeric_limits<char>::is_specialized;
9000db7afdSDavid E. O'Brien   const int  numeric_limits<char>::digits;
9100db7afdSDavid E. O'Brien   const int  numeric_limits<char>::digits10;
9200db7afdSDavid E. O'Brien   const bool numeric_limits<char>::is_signed;
9300db7afdSDavid E. O'Brien   const bool numeric_limits<char>::is_integer;
9400db7afdSDavid E. O'Brien   const bool numeric_limits<char>::is_exact;
9500db7afdSDavid E. O'Brien   const int  numeric_limits<char>::radix;
9600db7afdSDavid E. O'Brien   const int  numeric_limits<char>::min_exponent;
9700db7afdSDavid E. O'Brien   const int  numeric_limits<char>::min_exponent10;
9800db7afdSDavid E. O'Brien   const int  numeric_limits<char>::max_exponent;
9900db7afdSDavid E. O'Brien   const int  numeric_limits<char>::max_exponent10;
10000db7afdSDavid E. O'Brien   const bool numeric_limits<char>::has_infinity;
10100db7afdSDavid E. O'Brien   const bool numeric_limits<char>::has_quiet_NaN;
10200db7afdSDavid E. O'Brien   const bool numeric_limits<char>::has_signaling_NaN;
10300db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<char>::has_denorm;
10400db7afdSDavid E. O'Brien   const bool numeric_limits<char>::has_denorm_loss;
10500db7afdSDavid E. O'Brien   const bool numeric_limits<char>::is_iec559;
10600db7afdSDavid E. O'Brien   const bool numeric_limits<char>::is_bounded;
10700db7afdSDavid E. O'Brien   const bool numeric_limits<char>::is_modulo;
10800db7afdSDavid E. O'Brien   const bool numeric_limits<char>::traps;
10900db7afdSDavid E. O'Brien   const bool numeric_limits<char>::tinyness_before;
11000db7afdSDavid E. O'Brien   const float_round_style numeric_limits<char>::round_style;
11100db7afdSDavid E. O'Brien 
11200db7afdSDavid E. O'Brien   // signed char
11300db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::is_specialized;
11400db7afdSDavid E. O'Brien   const int  numeric_limits<signed char>::digits;
11500db7afdSDavid E. O'Brien   const int  numeric_limits<signed char>::digits10;
11600db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::is_signed;
11700db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::is_integer;
11800db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::is_exact;
11900db7afdSDavid E. O'Brien   const int  numeric_limits<signed char>::radix;
12000db7afdSDavid E. O'Brien   const int  numeric_limits<signed char>::min_exponent;
12100db7afdSDavid E. O'Brien   const int  numeric_limits<signed char>::min_exponent10;
12200db7afdSDavid E. O'Brien   const int  numeric_limits<signed char>::max_exponent;
12300db7afdSDavid E. O'Brien   const int  numeric_limits<signed char>::max_exponent10;
12400db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::has_infinity;
12500db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::has_quiet_NaN;
12600db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::has_signaling_NaN;
12700db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<signed char>::has_denorm;
12800db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::has_denorm_loss;
12900db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::is_iec559;
13000db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::is_bounded;
13100db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::is_modulo;
13200db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::traps;
13300db7afdSDavid E. O'Brien   const bool numeric_limits<signed char>::tinyness_before;
13400db7afdSDavid E. O'Brien   const float_round_style numeric_limits<signed char>::round_style;
13500db7afdSDavid E. O'Brien 
13600db7afdSDavid E. O'Brien   // unsigned char
13700db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::is_specialized;
13800db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned char>::digits;
13900db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned char>::digits10;
14000db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::is_signed;
14100db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::is_integer;
14200db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::is_exact;
14300db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned char>::radix;
14400db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned char>::min_exponent;
14500db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned char>::min_exponent10;
14600db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned char>::max_exponent;
14700db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned char>::max_exponent10;
14800db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::has_infinity;
14900db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::has_quiet_NaN;
15000db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::has_signaling_NaN;
15100db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<unsigned char>::has_denorm;
15200db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::has_denorm_loss;
15300db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::is_iec559;
15400db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::is_bounded;
15500db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::is_modulo;
15600db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::traps;
15700db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned char>::tinyness_before;
15800db7afdSDavid E. O'Brien   const float_round_style numeric_limits<unsigned char>::round_style;
15900db7afdSDavid E. O'Brien 
16000db7afdSDavid E. O'Brien   // wchar_t
16100db7afdSDavid E. O'Brien   // This used to be problematic...
162ffeaf689SAlexander Kabaev #ifdef _GLIBCXX_USE_WCHAR_T
16300db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::is_specialized;
16400db7afdSDavid E. O'Brien   const int  numeric_limits<wchar_t>::digits;
16500db7afdSDavid E. O'Brien   const int  numeric_limits<wchar_t>::digits10;
16600db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::is_signed;
16700db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::is_integer;
16800db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::is_exact;
16900db7afdSDavid E. O'Brien   const int  numeric_limits<wchar_t>::radix;
17000db7afdSDavid E. O'Brien   const int  numeric_limits<wchar_t>::min_exponent;
17100db7afdSDavid E. O'Brien   const int  numeric_limits<wchar_t>::min_exponent10;
17200db7afdSDavid E. O'Brien   const int  numeric_limits<wchar_t>::max_exponent;
17300db7afdSDavid E. O'Brien   const int  numeric_limits<wchar_t>::max_exponent10;
17400db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::has_infinity;
17500db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::has_quiet_NaN;
17600db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::has_signaling_NaN;
17700db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<wchar_t>::has_denorm;
17800db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::has_denorm_loss;
17900db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::is_iec559;
18000db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::is_bounded;
18100db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::is_modulo;
18200db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::traps;
18300db7afdSDavid E. O'Brien   const bool numeric_limits<wchar_t>::tinyness_before;
18400db7afdSDavid E. O'Brien   const float_round_style numeric_limits<wchar_t>::round_style;
185ffeaf689SAlexander Kabaev #endif // _GLIBCXX_USE_WCHAR_T
18600db7afdSDavid E. O'Brien 
18700db7afdSDavid E. O'Brien   // short
18800db7afdSDavid E. O'Brien   const bool numeric_limits<short>::is_specialized;
18900db7afdSDavid E. O'Brien   const int  numeric_limits<short>::digits;
19000db7afdSDavid E. O'Brien   const int  numeric_limits<short>::digits10;
19100db7afdSDavid E. O'Brien   const bool numeric_limits<short>::is_signed;
19200db7afdSDavid E. O'Brien   const bool numeric_limits<short>::is_integer;
19300db7afdSDavid E. O'Brien   const bool numeric_limits<short>::is_exact;
19400db7afdSDavid E. O'Brien   const int  numeric_limits<short>::radix;
19500db7afdSDavid E. O'Brien   const int  numeric_limits<short>::min_exponent;
19600db7afdSDavid E. O'Brien   const int  numeric_limits<short>::min_exponent10;
19700db7afdSDavid E. O'Brien   const int  numeric_limits<short>::max_exponent;
19800db7afdSDavid E. O'Brien   const int  numeric_limits<short>::max_exponent10;
19900db7afdSDavid E. O'Brien   const bool numeric_limits<short>::has_infinity;
20000db7afdSDavid E. O'Brien   const bool numeric_limits<short>::has_quiet_NaN;
20100db7afdSDavid E. O'Brien   const bool numeric_limits<short>::has_signaling_NaN;
20200db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<short>::has_denorm;
20300db7afdSDavid E. O'Brien   const bool numeric_limits<short>::has_denorm_loss;
20400db7afdSDavid E. O'Brien   const bool numeric_limits<short>::is_iec559;
20500db7afdSDavid E. O'Brien   const bool numeric_limits<short>::is_bounded;
20600db7afdSDavid E. O'Brien   const bool numeric_limits<short>::is_modulo;
20700db7afdSDavid E. O'Brien   const bool numeric_limits<short>::traps;
20800db7afdSDavid E. O'Brien   const bool numeric_limits<short>::tinyness_before;
20900db7afdSDavid E. O'Brien   const float_round_style numeric_limits<short>::round_style;
21000db7afdSDavid E. O'Brien 
21100db7afdSDavid E. O'Brien   // unsigned short
21200db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::is_specialized;
21300db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned short>::digits;
21400db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned short>::digits10;
21500db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::is_signed;
21600db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::is_integer;
21700db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::is_exact;
21800db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned short>::radix;
21900db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned short>::min_exponent;
22000db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned short>::min_exponent10;
22100db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned short>::max_exponent;
22200db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned short>::max_exponent10;
22300db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::has_infinity;
22400db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::has_quiet_NaN;
22500db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::has_signaling_NaN;
22600db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<unsigned short>::has_denorm;
22700db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::has_denorm_loss;
22800db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::is_iec559;
22900db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::is_bounded;
23000db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::is_modulo;
23100db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::traps;
23200db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned short>::tinyness_before;
23300db7afdSDavid E. O'Brien   const float_round_style numeric_limits<unsigned short>::round_style;
23400db7afdSDavid E. O'Brien 
23500db7afdSDavid E. O'Brien   // int
23600db7afdSDavid E. O'Brien   const bool numeric_limits<int>::is_specialized;
23700db7afdSDavid E. O'Brien   const int  numeric_limits<int>::digits;
23800db7afdSDavid E. O'Brien   const int  numeric_limits<int>::digits10;
23900db7afdSDavid E. O'Brien   const bool numeric_limits<int>::is_signed;
24000db7afdSDavid E. O'Brien   const bool numeric_limits<int>::is_integer;
24100db7afdSDavid E. O'Brien   const bool numeric_limits<int>::is_exact;
24200db7afdSDavid E. O'Brien   const int  numeric_limits<int>::radix;
24300db7afdSDavid E. O'Brien   const int  numeric_limits<int>::min_exponent;
24400db7afdSDavid E. O'Brien   const int  numeric_limits<int>::min_exponent10;
24500db7afdSDavid E. O'Brien   const int  numeric_limits<int>::max_exponent;
24600db7afdSDavid E. O'Brien   const int  numeric_limits<int>::max_exponent10;
24700db7afdSDavid E. O'Brien   const bool numeric_limits<int>::has_infinity;
24800db7afdSDavid E. O'Brien   const bool numeric_limits<int>::has_quiet_NaN;
24900db7afdSDavid E. O'Brien   const bool numeric_limits<int>::has_signaling_NaN;
25000db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<int>::has_denorm;
25100db7afdSDavid E. O'Brien   const bool numeric_limits<int>::has_denorm_loss;
25200db7afdSDavid E. O'Brien   const bool numeric_limits<int>::is_iec559;
25300db7afdSDavid E. O'Brien   const bool numeric_limits<int>::is_bounded;
25400db7afdSDavid E. O'Brien   const bool numeric_limits<int>::is_modulo;
25500db7afdSDavid E. O'Brien   const bool numeric_limits<int>::traps;
25600db7afdSDavid E. O'Brien   const bool numeric_limits<int>::tinyness_before;
25700db7afdSDavid E. O'Brien   const float_round_style numeric_limits<int>::round_style;
25800db7afdSDavid E. O'Brien 
25900db7afdSDavid E. O'Brien   // unsigned int
26000db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::is_specialized;
26100db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned int>::digits;
26200db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned int>::digits10;
26300db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::is_signed;
26400db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::is_integer;
26500db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::is_exact;
26600db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned int>::radix;
26700db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned int>::min_exponent;
26800db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned int>::min_exponent10;
26900db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned int>::max_exponent;
27000db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned int>::max_exponent10;
27100db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::has_infinity;
27200db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::has_quiet_NaN;
27300db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::has_signaling_NaN;
27400db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<unsigned int>::has_denorm;
27500db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::has_denorm_loss;
27600db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::is_iec559;
27700db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::is_bounded;
27800db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::is_modulo;
27900db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::traps;
28000db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned int>::tinyness_before;
28100db7afdSDavid E. O'Brien   const float_round_style numeric_limits<unsigned int>::round_style;
28200db7afdSDavid E. O'Brien 
28300db7afdSDavid E. O'Brien   // long
28400db7afdSDavid E. O'Brien   const bool numeric_limits<long>::is_specialized;
28500db7afdSDavid E. O'Brien   const int  numeric_limits<long>::digits;
28600db7afdSDavid E. O'Brien   const int  numeric_limits<long>::digits10;
28700db7afdSDavid E. O'Brien   const bool numeric_limits<long>::is_signed;
28800db7afdSDavid E. O'Brien   const bool numeric_limits<long>::is_integer;
28900db7afdSDavid E. O'Brien   const bool numeric_limits<long>::is_exact;
29000db7afdSDavid E. O'Brien   const int  numeric_limits<long>::radix;
29100db7afdSDavid E. O'Brien   const int  numeric_limits<long>::min_exponent;
29200db7afdSDavid E. O'Brien   const int  numeric_limits<long>::min_exponent10;
29300db7afdSDavid E. O'Brien   const int  numeric_limits<long>::max_exponent;
29400db7afdSDavid E. O'Brien   const int  numeric_limits<long>::max_exponent10;
29500db7afdSDavid E. O'Brien   const bool numeric_limits<long>::has_infinity;
29600db7afdSDavid E. O'Brien   const bool numeric_limits<long>::has_quiet_NaN;
29700db7afdSDavid E. O'Brien   const bool numeric_limits<long>::has_signaling_NaN;
29800db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<long>::has_denorm;
29900db7afdSDavid E. O'Brien   const bool numeric_limits<long>::has_denorm_loss;
30000db7afdSDavid E. O'Brien   const bool numeric_limits<long>::is_iec559;
30100db7afdSDavid E. O'Brien   const bool numeric_limits<long>::is_bounded;
30200db7afdSDavid E. O'Brien   const bool numeric_limits<long>::is_modulo;
30300db7afdSDavid E. O'Brien   const bool numeric_limits<long>::traps;
30400db7afdSDavid E. O'Brien   const bool numeric_limits<long>::tinyness_before;
30500db7afdSDavid E. O'Brien   const float_round_style numeric_limits<long>::round_style;
30600db7afdSDavid E. O'Brien 
30700db7afdSDavid E. O'Brien   // unsigned long
30800db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::is_specialized;
30900db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long>::digits;
31000db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long>::digits10;
31100db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::is_signed;
31200db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::is_integer;
31300db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::is_exact;
31400db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long>::radix;
31500db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long>::min_exponent;
31600db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long>::min_exponent10;
31700db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long>::max_exponent;
31800db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long>::max_exponent10;
31900db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::has_infinity;
32000db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::has_quiet_NaN;
32100db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::has_signaling_NaN;
32200db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<unsigned long>::has_denorm;
32300db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::has_denorm_loss;
32400db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::is_iec559;
32500db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::is_bounded;
32600db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::is_modulo;
32700db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::traps;
32800db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long>::tinyness_before;
32900db7afdSDavid E. O'Brien   const float_round_style numeric_limits<unsigned long>::round_style;
33000db7afdSDavid E. O'Brien 
33100db7afdSDavid E. O'Brien   // NOTA BENE:  long long is an extension
33200db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::is_specialized;
33300db7afdSDavid E. O'Brien   const int  numeric_limits<long long>::digits;
33400db7afdSDavid E. O'Brien   const int  numeric_limits<long long>::digits10;
33500db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::is_signed;
33600db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::is_integer;
33700db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::is_exact;
33800db7afdSDavid E. O'Brien   const int  numeric_limits<long long>::radix;
33900db7afdSDavid E. O'Brien   const int  numeric_limits<long long>::min_exponent;
34000db7afdSDavid E. O'Brien   const int  numeric_limits<long long>::min_exponent10;
34100db7afdSDavid E. O'Brien   const int  numeric_limits<long long>::max_exponent;
34200db7afdSDavid E. O'Brien   const int  numeric_limits<long long>::max_exponent10;
34300db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::has_infinity;
34400db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::has_quiet_NaN;
34500db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::has_signaling_NaN;
34600db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<long long>::has_denorm;
34700db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::has_denorm_loss;
34800db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::is_iec559;
34900db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::is_bounded;
35000db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::is_modulo;
35100db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::traps;
35200db7afdSDavid E. O'Brien   const bool numeric_limits<long long>::tinyness_before;
35300db7afdSDavid E. O'Brien   const float_round_style numeric_limits<long long>::round_style;
35400db7afdSDavid E. O'Brien 
35500db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::is_specialized;
35600db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long long>::digits;
35700db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long long>::digits10;
35800db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::is_signed;
35900db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::is_integer;
36000db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::is_exact;
36100db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long long>::radix;
36200db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long long>::min_exponent;
36300db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long long>::min_exponent10;
36400db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long long>::max_exponent;
36500db7afdSDavid E. O'Brien   const int  numeric_limits<unsigned long long>::max_exponent10;
36600db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::has_infinity;
36700db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::has_quiet_NaN;
36800db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::has_signaling_NaN;
36900db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<unsigned long long>::has_denorm;
37000db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::has_denorm_loss;
37100db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::is_iec559;
37200db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::is_bounded;
37300db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::is_modulo;
37400db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::traps;
37500db7afdSDavid E. O'Brien   const bool numeric_limits<unsigned long long>::tinyness_before;
37600db7afdSDavid E. O'Brien   const float_round_style numeric_limits<unsigned long long>::round_style;
37700db7afdSDavid E. O'Brien 
37800db7afdSDavid E. O'Brien   // float
37900db7afdSDavid E. O'Brien   const bool numeric_limits<float>::is_specialized;
38000db7afdSDavid E. O'Brien   const int  numeric_limits<float>::digits;
38100db7afdSDavid E. O'Brien   const int  numeric_limits<float>::digits10;
38200db7afdSDavid E. O'Brien   const bool numeric_limits<float>::is_signed;
38300db7afdSDavid E. O'Brien   const bool numeric_limits<float>::is_integer;
38400db7afdSDavid E. O'Brien   const bool numeric_limits<float>::is_exact;
38500db7afdSDavid E. O'Brien   const int  numeric_limits<float>::radix;
38600db7afdSDavid E. O'Brien   const int  numeric_limits<float>::min_exponent;
38700db7afdSDavid E. O'Brien   const int  numeric_limits<float>::min_exponent10;
38800db7afdSDavid E. O'Brien   const int  numeric_limits<float>::max_exponent;
38900db7afdSDavid E. O'Brien   const int  numeric_limits<float>::max_exponent10;
39000db7afdSDavid E. O'Brien   const bool numeric_limits<float>::has_infinity;
39100db7afdSDavid E. O'Brien   const bool numeric_limits<float>::has_quiet_NaN;
39200db7afdSDavid E. O'Brien   const bool numeric_limits<float>::has_signaling_NaN;
39300db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<float>::has_denorm;
39400db7afdSDavid E. O'Brien   const bool numeric_limits<float>::has_denorm_loss;
39500db7afdSDavid E. O'Brien   const bool numeric_limits<float>::is_iec559;
39600db7afdSDavid E. O'Brien   const bool numeric_limits<float>::is_bounded;
39700db7afdSDavid E. O'Brien   const bool numeric_limits<float>::is_modulo;
39800db7afdSDavid E. O'Brien   const bool numeric_limits<float>::traps;
39900db7afdSDavid E. O'Brien   const bool numeric_limits<float>::tinyness_before;
40000db7afdSDavid E. O'Brien   const float_round_style numeric_limits<float>::round_style;
40100db7afdSDavid E. O'Brien 
40200db7afdSDavid E. O'Brien   // double
40300db7afdSDavid E. O'Brien   const bool numeric_limits<double>::is_specialized;
40400db7afdSDavid E. O'Brien   const int  numeric_limits<double>::digits;
40500db7afdSDavid E. O'Brien   const int  numeric_limits<double>::digits10;
40600db7afdSDavid E. O'Brien   const bool numeric_limits<double>::is_signed;
40700db7afdSDavid E. O'Brien   const bool numeric_limits<double>::is_integer;
40800db7afdSDavid E. O'Brien   const bool numeric_limits<double>::is_exact;
40900db7afdSDavid E. O'Brien   const int  numeric_limits<double>::radix;
41000db7afdSDavid E. O'Brien   const int  numeric_limits<double>::min_exponent;
41100db7afdSDavid E. O'Brien   const int  numeric_limits<double>::min_exponent10;
41200db7afdSDavid E. O'Brien   const int  numeric_limits<double>::max_exponent;
41300db7afdSDavid E. O'Brien   const int  numeric_limits<double>::max_exponent10;
41400db7afdSDavid E. O'Brien   const bool numeric_limits<double>::has_infinity;
41500db7afdSDavid E. O'Brien   const bool numeric_limits<double>::has_quiet_NaN;
41600db7afdSDavid E. O'Brien   const bool numeric_limits<double>::has_signaling_NaN;
41700db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<double>::has_denorm;
41800db7afdSDavid E. O'Brien   const bool numeric_limits<double>::has_denorm_loss;
41900db7afdSDavid E. O'Brien   const bool numeric_limits<double>::is_iec559;
42000db7afdSDavid E. O'Brien   const bool numeric_limits<double>::is_bounded;
42100db7afdSDavid E. O'Brien   const bool numeric_limits<double>::is_modulo;
42200db7afdSDavid E. O'Brien   const bool numeric_limits<double>::traps;
42300db7afdSDavid E. O'Brien   const bool numeric_limits<double>::tinyness_before;
42400db7afdSDavid E. O'Brien   const float_round_style numeric_limits<double>::round_style;
42500db7afdSDavid E. O'Brien 
42600db7afdSDavid E. O'Brien   // long double
42700db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::is_specialized;
42800db7afdSDavid E. O'Brien   const int  numeric_limits<long double>::digits;
42900db7afdSDavid E. O'Brien   const int  numeric_limits<long double>::digits10;
43000db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::is_signed;
43100db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::is_integer;
43200db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::is_exact;
43300db7afdSDavid E. O'Brien   const int  numeric_limits<long double>::radix;
43400db7afdSDavid E. O'Brien   const int  numeric_limits<long double>::min_exponent;
43500db7afdSDavid E. O'Brien   const int  numeric_limits<long double>::min_exponent10;
43600db7afdSDavid E. O'Brien   const int  numeric_limits<long double>::max_exponent;
43700db7afdSDavid E. O'Brien   const int  numeric_limits<long double>::max_exponent10;
43800db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::has_infinity;
43900db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::has_quiet_NaN;
44000db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::has_signaling_NaN;
44100db7afdSDavid E. O'Brien   const float_denorm_style numeric_limits<long double>::has_denorm;
44200db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::has_denorm_loss;
44300db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::is_iec559;
44400db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::is_bounded;
44500db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::is_modulo;
44600db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::traps;
44700db7afdSDavid E. O'Brien   const bool numeric_limits<long double>::tinyness_before;
44800db7afdSDavid E. O'Brien   const float_round_style numeric_limits<long double>::round_style;
449*f8a1b7d9SAlexander Kabaev 
450*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
451*f8a1b7d9SAlexander Kabaev 
452*f8a1b7d9SAlexander Kabaev // XXX GLIBCXX_ABI Deprecated
453*f8a1b7d9SAlexander Kabaev #ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
454*f8a1b7d9SAlexander Kabaev 
455*f8a1b7d9SAlexander Kabaev #define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \
456*f8a1b7d9SAlexander Kabaev   extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \
457*f8a1b7d9SAlexander Kabaev   __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E")))
458*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14);
459*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (int, digits, 6);
460*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8);
461*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9);
462*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10);
463*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8);
464*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (int, radix, 5);
465*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12);
466*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14);
467*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12);
468*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14);
469*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12);
470*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13);
471*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17);
472*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10);
473*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15);
474*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9);
475*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10);
476*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9);
477*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5);
478*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15);
479*f8a1b7d9SAlexander Kabaev _GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11);
480*f8a1b7d9SAlexander Kabaev 
481*f8a1b7d9SAlexander Kabaev #endif // _GLIBCXX_LONG_DOUBLE_COMPAT
482