197403Sobrien// Static data members of -*- C++ -*- numeric_limits classes
297403Sobrien
3169691Skan// Copyright (C) 1999, 2001, 2002, 2005, 2006 Free Software Foundation, Inc.
497403Sobrien//
597403Sobrien// This file is part of the GNU ISO C++ Library.  This library is free
697403Sobrien// software; you can redistribute it and/or modify it under the
797403Sobrien// terms of the GNU General Public License as published by the
897403Sobrien// Free Software Foundation; either version 2, or (at your option)
997403Sobrien// any later version.
1097403Sobrien
1197403Sobrien// This library is distributed in the hope that it will be useful,
1297403Sobrien// but WITHOUT ANY WARRANTY; without even the implied warranty of
1397403Sobrien// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1497403Sobrien// GNU General Public License for more details.
1597403Sobrien
1697403Sobrien// You should have received a copy of the GNU General Public License along
1797403Sobrien// with this library; see the file COPYING.  If not, write to the Free
18169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
1997403Sobrien// USA.
2097403Sobrien
2197403Sobrien// As a special exception, you may use this file as part of a free software
2297403Sobrien// library without restriction.  Specifically, if other files instantiate
2397403Sobrien// templates or use macros or inline functions from this file, or you compile
2497403Sobrien// this file and link it with other files to produce an executable, this
2597403Sobrien// file does not by itself cause the resulting executable to be covered by
2697403Sobrien// the GNU General Public License.  This exception does not however
2797403Sobrien// invalidate any other reasons why the executable file might be covered by
2897403Sobrien// the GNU General Public License.
2997403Sobrien
3097403Sobrien// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
3197403Sobrien
3297403Sobrien//
3397403Sobrien// ISO C++ 14882:1998
3497403Sobrien// 18.2.1
3597403Sobrien//
3697403Sobrien
3797403Sobrien#include <limits>
3897403Sobrien
39169691Skan_GLIBCXX_BEGIN_NAMESPACE(std)
40169691Skan
4197403Sobrien  const bool __numeric_limits_base::is_specialized;
4297403Sobrien  const int  __numeric_limits_base::digits;
4397403Sobrien  const int  __numeric_limits_base::digits10;
4497403Sobrien  const bool __numeric_limits_base::is_signed;
4597403Sobrien  const bool __numeric_limits_base::is_integer;
4697403Sobrien  const bool __numeric_limits_base::is_exact;
4797403Sobrien  const int  __numeric_limits_base::radix;
4897403Sobrien  const int  __numeric_limits_base::min_exponent;
4997403Sobrien  const int  __numeric_limits_base::min_exponent10;
5097403Sobrien  const int  __numeric_limits_base::max_exponent;
5197403Sobrien  const int  __numeric_limits_base::max_exponent10;
5297403Sobrien  const bool __numeric_limits_base::has_infinity;
5397403Sobrien  const bool __numeric_limits_base::has_quiet_NaN;
5497403Sobrien  const bool __numeric_limits_base::has_signaling_NaN;
5597403Sobrien  const float_denorm_style __numeric_limits_base::has_denorm;
5697403Sobrien  const bool __numeric_limits_base::has_denorm_loss;
5797403Sobrien  const bool __numeric_limits_base::is_iec559;
5897403Sobrien  const bool __numeric_limits_base::is_bounded;
5997403Sobrien  const bool __numeric_limits_base::is_modulo;
6097403Sobrien  const bool __numeric_limits_base::traps;
6197403Sobrien  const bool __numeric_limits_base::tinyness_before;
6297403Sobrien  const float_round_style __numeric_limits_base::round_style;
6397403Sobrien
6497403Sobrien  // bool
6597403Sobrien  const bool numeric_limits<bool>::is_specialized;
6697403Sobrien  const int  numeric_limits<bool>::digits;
6797403Sobrien  const int  numeric_limits<bool>::digits10;
6897403Sobrien  const bool numeric_limits<bool>::is_signed;
6997403Sobrien  const bool numeric_limits<bool>::is_integer;
7097403Sobrien  const bool numeric_limits<bool>::is_exact;
7197403Sobrien  const int  numeric_limits<bool>::radix;
7297403Sobrien  const int  numeric_limits<bool>::min_exponent;
7397403Sobrien  const int  numeric_limits<bool>::min_exponent10;
7497403Sobrien  const int  numeric_limits<bool>::max_exponent;
7597403Sobrien  const int  numeric_limits<bool>::max_exponent10;
7697403Sobrien  const bool numeric_limits<bool>::has_infinity;
7797403Sobrien  const bool numeric_limits<bool>::has_quiet_NaN;
7897403Sobrien  const bool numeric_limits<bool>::has_signaling_NaN;
7997403Sobrien  const float_denorm_style numeric_limits<bool>::has_denorm;
8097403Sobrien  const bool numeric_limits<bool>::has_denorm_loss;
8197403Sobrien  const bool numeric_limits<bool>::is_iec559;
8297403Sobrien  const bool numeric_limits<bool>::is_bounded;
8397403Sobrien  const bool numeric_limits<bool>::is_modulo;
8497403Sobrien  const bool numeric_limits<bool>::traps;
8597403Sobrien  const bool numeric_limits<bool>::tinyness_before;
8697403Sobrien  const float_round_style numeric_limits<bool>::round_style;
8797403Sobrien
8897403Sobrien  // char
8997403Sobrien  const bool numeric_limits<char>::is_specialized;
9097403Sobrien  const int  numeric_limits<char>::digits;
9197403Sobrien  const int  numeric_limits<char>::digits10;
9297403Sobrien  const bool numeric_limits<char>::is_signed;
9397403Sobrien  const bool numeric_limits<char>::is_integer;
9497403Sobrien  const bool numeric_limits<char>::is_exact;
9597403Sobrien  const int  numeric_limits<char>::radix;
9697403Sobrien  const int  numeric_limits<char>::min_exponent;
9797403Sobrien  const int  numeric_limits<char>::min_exponent10;
9897403Sobrien  const int  numeric_limits<char>::max_exponent;
9997403Sobrien  const int  numeric_limits<char>::max_exponent10;
10097403Sobrien  const bool numeric_limits<char>::has_infinity;
10197403Sobrien  const bool numeric_limits<char>::has_quiet_NaN;
10297403Sobrien  const bool numeric_limits<char>::has_signaling_NaN;
10397403Sobrien  const float_denorm_style numeric_limits<char>::has_denorm;
10497403Sobrien  const bool numeric_limits<char>::has_denorm_loss;
10597403Sobrien  const bool numeric_limits<char>::is_iec559;
10697403Sobrien  const bool numeric_limits<char>::is_bounded;
10797403Sobrien  const bool numeric_limits<char>::is_modulo;
10897403Sobrien  const bool numeric_limits<char>::traps;
10997403Sobrien  const bool numeric_limits<char>::tinyness_before;
11097403Sobrien  const float_round_style numeric_limits<char>::round_style;
11197403Sobrien
11297403Sobrien  // signed char
11397403Sobrien  const bool numeric_limits<signed char>::is_specialized;
11497403Sobrien  const int  numeric_limits<signed char>::digits;
11597403Sobrien  const int  numeric_limits<signed char>::digits10;
11697403Sobrien  const bool numeric_limits<signed char>::is_signed;
11797403Sobrien  const bool numeric_limits<signed char>::is_integer;
11897403Sobrien  const bool numeric_limits<signed char>::is_exact;
11997403Sobrien  const int  numeric_limits<signed char>::radix;
12097403Sobrien  const int  numeric_limits<signed char>::min_exponent;
12197403Sobrien  const int  numeric_limits<signed char>::min_exponent10;
12297403Sobrien  const int  numeric_limits<signed char>::max_exponent;
12397403Sobrien  const int  numeric_limits<signed char>::max_exponent10;
12497403Sobrien  const bool numeric_limits<signed char>::has_infinity;
12597403Sobrien  const bool numeric_limits<signed char>::has_quiet_NaN;
12697403Sobrien  const bool numeric_limits<signed char>::has_signaling_NaN;
12797403Sobrien  const float_denorm_style numeric_limits<signed char>::has_denorm;
12897403Sobrien  const bool numeric_limits<signed char>::has_denorm_loss;
12997403Sobrien  const bool numeric_limits<signed char>::is_iec559;
13097403Sobrien  const bool numeric_limits<signed char>::is_bounded;
13197403Sobrien  const bool numeric_limits<signed char>::is_modulo;
13297403Sobrien  const bool numeric_limits<signed char>::traps;
13397403Sobrien  const bool numeric_limits<signed char>::tinyness_before;
13497403Sobrien  const float_round_style numeric_limits<signed char>::round_style;
13597403Sobrien
13697403Sobrien  // unsigned char
13797403Sobrien  const bool numeric_limits<unsigned char>::is_specialized;
13897403Sobrien  const int  numeric_limits<unsigned char>::digits;
13997403Sobrien  const int  numeric_limits<unsigned char>::digits10;
14097403Sobrien  const bool numeric_limits<unsigned char>::is_signed;
14197403Sobrien  const bool numeric_limits<unsigned char>::is_integer;
14297403Sobrien  const bool numeric_limits<unsigned char>::is_exact;
14397403Sobrien  const int  numeric_limits<unsigned char>::radix;
14497403Sobrien  const int  numeric_limits<unsigned char>::min_exponent;
14597403Sobrien  const int  numeric_limits<unsigned char>::min_exponent10;
14697403Sobrien  const int  numeric_limits<unsigned char>::max_exponent;
14797403Sobrien  const int  numeric_limits<unsigned char>::max_exponent10;
14897403Sobrien  const bool numeric_limits<unsigned char>::has_infinity;
14997403Sobrien  const bool numeric_limits<unsigned char>::has_quiet_NaN;
15097403Sobrien  const bool numeric_limits<unsigned char>::has_signaling_NaN;
15197403Sobrien  const float_denorm_style numeric_limits<unsigned char>::has_denorm;
15297403Sobrien  const bool numeric_limits<unsigned char>::has_denorm_loss;
15397403Sobrien  const bool numeric_limits<unsigned char>::is_iec559;
15497403Sobrien  const bool numeric_limits<unsigned char>::is_bounded;
15597403Sobrien  const bool numeric_limits<unsigned char>::is_modulo;
15697403Sobrien  const bool numeric_limits<unsigned char>::traps;
15797403Sobrien  const bool numeric_limits<unsigned char>::tinyness_before;
15897403Sobrien  const float_round_style numeric_limits<unsigned char>::round_style;
15997403Sobrien
16097403Sobrien  // wchar_t
16197403Sobrien  // This used to be problematic...
162132720Skan#ifdef _GLIBCXX_USE_WCHAR_T
16397403Sobrien  const bool numeric_limits<wchar_t>::is_specialized;
16497403Sobrien  const int  numeric_limits<wchar_t>::digits;
16597403Sobrien  const int  numeric_limits<wchar_t>::digits10;
16697403Sobrien  const bool numeric_limits<wchar_t>::is_signed;
16797403Sobrien  const bool numeric_limits<wchar_t>::is_integer;
16897403Sobrien  const bool numeric_limits<wchar_t>::is_exact;
16997403Sobrien  const int  numeric_limits<wchar_t>::radix;
17097403Sobrien  const int  numeric_limits<wchar_t>::min_exponent;
17197403Sobrien  const int  numeric_limits<wchar_t>::min_exponent10;
17297403Sobrien  const int  numeric_limits<wchar_t>::max_exponent;
17397403Sobrien  const int  numeric_limits<wchar_t>::max_exponent10;
17497403Sobrien  const bool numeric_limits<wchar_t>::has_infinity;
17597403Sobrien  const bool numeric_limits<wchar_t>::has_quiet_NaN;
17697403Sobrien  const bool numeric_limits<wchar_t>::has_signaling_NaN;
17797403Sobrien  const float_denorm_style numeric_limits<wchar_t>::has_denorm;
17897403Sobrien  const bool numeric_limits<wchar_t>::has_denorm_loss;
17997403Sobrien  const bool numeric_limits<wchar_t>::is_iec559;
18097403Sobrien  const bool numeric_limits<wchar_t>::is_bounded;
18197403Sobrien  const bool numeric_limits<wchar_t>::is_modulo;
18297403Sobrien  const bool numeric_limits<wchar_t>::traps;
18397403Sobrien  const bool numeric_limits<wchar_t>::tinyness_before;
18497403Sobrien  const float_round_style numeric_limits<wchar_t>::round_style;
185132720Skan#endif // _GLIBCXX_USE_WCHAR_T
18697403Sobrien
18797403Sobrien  // short
18897403Sobrien  const bool numeric_limits<short>::is_specialized;
18997403Sobrien  const int  numeric_limits<short>::digits;
19097403Sobrien  const int  numeric_limits<short>::digits10;
19197403Sobrien  const bool numeric_limits<short>::is_signed;
19297403Sobrien  const bool numeric_limits<short>::is_integer;
19397403Sobrien  const bool numeric_limits<short>::is_exact;
19497403Sobrien  const int  numeric_limits<short>::radix;
19597403Sobrien  const int  numeric_limits<short>::min_exponent;
19697403Sobrien  const int  numeric_limits<short>::min_exponent10;
19797403Sobrien  const int  numeric_limits<short>::max_exponent;
19897403Sobrien  const int  numeric_limits<short>::max_exponent10;
19997403Sobrien  const bool numeric_limits<short>::has_infinity;
20097403Sobrien  const bool numeric_limits<short>::has_quiet_NaN;
20197403Sobrien  const bool numeric_limits<short>::has_signaling_NaN;
20297403Sobrien  const float_denorm_style numeric_limits<short>::has_denorm;
20397403Sobrien  const bool numeric_limits<short>::has_denorm_loss;
20497403Sobrien  const bool numeric_limits<short>::is_iec559;
20597403Sobrien  const bool numeric_limits<short>::is_bounded;
20697403Sobrien  const bool numeric_limits<short>::is_modulo;
20797403Sobrien  const bool numeric_limits<short>::traps;
20897403Sobrien  const bool numeric_limits<short>::tinyness_before;
20997403Sobrien  const float_round_style numeric_limits<short>::round_style;
21097403Sobrien
21197403Sobrien  // unsigned short
21297403Sobrien  const bool numeric_limits<unsigned short>::is_specialized;
21397403Sobrien  const int  numeric_limits<unsigned short>::digits;
21497403Sobrien  const int  numeric_limits<unsigned short>::digits10;
21597403Sobrien  const bool numeric_limits<unsigned short>::is_signed;
21697403Sobrien  const bool numeric_limits<unsigned short>::is_integer;
21797403Sobrien  const bool numeric_limits<unsigned short>::is_exact;
21897403Sobrien  const int  numeric_limits<unsigned short>::radix;
21997403Sobrien  const int  numeric_limits<unsigned short>::min_exponent;
22097403Sobrien  const int  numeric_limits<unsigned short>::min_exponent10;
22197403Sobrien  const int  numeric_limits<unsigned short>::max_exponent;
22297403Sobrien  const int  numeric_limits<unsigned short>::max_exponent10;
22397403Sobrien  const bool numeric_limits<unsigned short>::has_infinity;
22497403Sobrien  const bool numeric_limits<unsigned short>::has_quiet_NaN;
22597403Sobrien  const bool numeric_limits<unsigned short>::has_signaling_NaN;
22697403Sobrien  const float_denorm_style numeric_limits<unsigned short>::has_denorm;
22797403Sobrien  const bool numeric_limits<unsigned short>::has_denorm_loss;
22897403Sobrien  const bool numeric_limits<unsigned short>::is_iec559;
22997403Sobrien  const bool numeric_limits<unsigned short>::is_bounded;
23097403Sobrien  const bool numeric_limits<unsigned short>::is_modulo;
23197403Sobrien  const bool numeric_limits<unsigned short>::traps;
23297403Sobrien  const bool numeric_limits<unsigned short>::tinyness_before;
23397403Sobrien  const float_round_style numeric_limits<unsigned short>::round_style;
23497403Sobrien
23597403Sobrien  // int
23697403Sobrien  const bool numeric_limits<int>::is_specialized;
23797403Sobrien  const int  numeric_limits<int>::digits;
23897403Sobrien  const int  numeric_limits<int>::digits10;
23997403Sobrien  const bool numeric_limits<int>::is_signed;
24097403Sobrien  const bool numeric_limits<int>::is_integer;
24197403Sobrien  const bool numeric_limits<int>::is_exact;
24297403Sobrien  const int  numeric_limits<int>::radix;
24397403Sobrien  const int  numeric_limits<int>::min_exponent;
24497403Sobrien  const int  numeric_limits<int>::min_exponent10;
24597403Sobrien  const int  numeric_limits<int>::max_exponent;
24697403Sobrien  const int  numeric_limits<int>::max_exponent10;
24797403Sobrien  const bool numeric_limits<int>::has_infinity;
24897403Sobrien  const bool numeric_limits<int>::has_quiet_NaN;
24997403Sobrien  const bool numeric_limits<int>::has_signaling_NaN;
25097403Sobrien  const float_denorm_style numeric_limits<int>::has_denorm;
25197403Sobrien  const bool numeric_limits<int>::has_denorm_loss;
25297403Sobrien  const bool numeric_limits<int>::is_iec559;
25397403Sobrien  const bool numeric_limits<int>::is_bounded;
25497403Sobrien  const bool numeric_limits<int>::is_modulo;
25597403Sobrien  const bool numeric_limits<int>::traps;
25697403Sobrien  const bool numeric_limits<int>::tinyness_before;
25797403Sobrien  const float_round_style numeric_limits<int>::round_style;
25897403Sobrien
25997403Sobrien  // unsigned int
26097403Sobrien  const bool numeric_limits<unsigned int>::is_specialized;
26197403Sobrien  const int  numeric_limits<unsigned int>::digits;
26297403Sobrien  const int  numeric_limits<unsigned int>::digits10;
26397403Sobrien  const bool numeric_limits<unsigned int>::is_signed;
26497403Sobrien  const bool numeric_limits<unsigned int>::is_integer;
26597403Sobrien  const bool numeric_limits<unsigned int>::is_exact;
26697403Sobrien  const int  numeric_limits<unsigned int>::radix;
26797403Sobrien  const int  numeric_limits<unsigned int>::min_exponent;
26897403Sobrien  const int  numeric_limits<unsigned int>::min_exponent10;
26997403Sobrien  const int  numeric_limits<unsigned int>::max_exponent;
27097403Sobrien  const int  numeric_limits<unsigned int>::max_exponent10;
27197403Sobrien  const bool numeric_limits<unsigned int>::has_infinity;
27297403Sobrien  const bool numeric_limits<unsigned int>::has_quiet_NaN;
27397403Sobrien  const bool numeric_limits<unsigned int>::has_signaling_NaN;
27497403Sobrien  const float_denorm_style numeric_limits<unsigned int>::has_denorm;
27597403Sobrien  const bool numeric_limits<unsigned int>::has_denorm_loss;
27697403Sobrien  const bool numeric_limits<unsigned int>::is_iec559;
27797403Sobrien  const bool numeric_limits<unsigned int>::is_bounded;
27897403Sobrien  const bool numeric_limits<unsigned int>::is_modulo;
27997403Sobrien  const bool numeric_limits<unsigned int>::traps;
28097403Sobrien  const bool numeric_limits<unsigned int>::tinyness_before;
28197403Sobrien  const float_round_style numeric_limits<unsigned int>::round_style;
28297403Sobrien
28397403Sobrien  // long
28497403Sobrien  const bool numeric_limits<long>::is_specialized;
28597403Sobrien  const int  numeric_limits<long>::digits;
28697403Sobrien  const int  numeric_limits<long>::digits10;
28797403Sobrien  const bool numeric_limits<long>::is_signed;
28897403Sobrien  const bool numeric_limits<long>::is_integer;
28997403Sobrien  const bool numeric_limits<long>::is_exact;
29097403Sobrien  const int  numeric_limits<long>::radix;
29197403Sobrien  const int  numeric_limits<long>::min_exponent;
29297403Sobrien  const int  numeric_limits<long>::min_exponent10;
29397403Sobrien  const int  numeric_limits<long>::max_exponent;
29497403Sobrien  const int  numeric_limits<long>::max_exponent10;
29597403Sobrien  const bool numeric_limits<long>::has_infinity;
29697403Sobrien  const bool numeric_limits<long>::has_quiet_NaN;
29797403Sobrien  const bool numeric_limits<long>::has_signaling_NaN;
29897403Sobrien  const float_denorm_style numeric_limits<long>::has_denorm;
29997403Sobrien  const bool numeric_limits<long>::has_denorm_loss;
30097403Sobrien  const bool numeric_limits<long>::is_iec559;
30197403Sobrien  const bool numeric_limits<long>::is_bounded;
30297403Sobrien  const bool numeric_limits<long>::is_modulo;
30397403Sobrien  const bool numeric_limits<long>::traps;
30497403Sobrien  const bool numeric_limits<long>::tinyness_before;
30597403Sobrien  const float_round_style numeric_limits<long>::round_style;
30697403Sobrien
30797403Sobrien  // unsigned long
30897403Sobrien  const bool numeric_limits<unsigned long>::is_specialized;
30997403Sobrien  const int  numeric_limits<unsigned long>::digits;
31097403Sobrien  const int  numeric_limits<unsigned long>::digits10;
31197403Sobrien  const bool numeric_limits<unsigned long>::is_signed;
31297403Sobrien  const bool numeric_limits<unsigned long>::is_integer;
31397403Sobrien  const bool numeric_limits<unsigned long>::is_exact;
31497403Sobrien  const int  numeric_limits<unsigned long>::radix;
31597403Sobrien  const int  numeric_limits<unsigned long>::min_exponent;
31697403Sobrien  const int  numeric_limits<unsigned long>::min_exponent10;
31797403Sobrien  const int  numeric_limits<unsigned long>::max_exponent;
31897403Sobrien  const int  numeric_limits<unsigned long>::max_exponent10;
31997403Sobrien  const bool numeric_limits<unsigned long>::has_infinity;
32097403Sobrien  const bool numeric_limits<unsigned long>::has_quiet_NaN;
32197403Sobrien  const bool numeric_limits<unsigned long>::has_signaling_NaN;
32297403Sobrien  const float_denorm_style numeric_limits<unsigned long>::has_denorm;
32397403Sobrien  const bool numeric_limits<unsigned long>::has_denorm_loss;
32497403Sobrien  const bool numeric_limits<unsigned long>::is_iec559;
32597403Sobrien  const bool numeric_limits<unsigned long>::is_bounded;
32697403Sobrien  const bool numeric_limits<unsigned long>::is_modulo;
32797403Sobrien  const bool numeric_limits<unsigned long>::traps;
32897403Sobrien  const bool numeric_limits<unsigned long>::tinyness_before;
32997403Sobrien  const float_round_style numeric_limits<unsigned long>::round_style;
33097403Sobrien
33197403Sobrien  // NOTA BENE:  long long is an extension
33297403Sobrien  const bool numeric_limits<long long>::is_specialized;
33397403Sobrien  const int  numeric_limits<long long>::digits;
33497403Sobrien  const int  numeric_limits<long long>::digits10;
33597403Sobrien  const bool numeric_limits<long long>::is_signed;
33697403Sobrien  const bool numeric_limits<long long>::is_integer;
33797403Sobrien  const bool numeric_limits<long long>::is_exact;
33897403Sobrien  const int  numeric_limits<long long>::radix;
33997403Sobrien  const int  numeric_limits<long long>::min_exponent;
34097403Sobrien  const int  numeric_limits<long long>::min_exponent10;
34197403Sobrien  const int  numeric_limits<long long>::max_exponent;
34297403Sobrien  const int  numeric_limits<long long>::max_exponent10;
34397403Sobrien  const bool numeric_limits<long long>::has_infinity;
34497403Sobrien  const bool numeric_limits<long long>::has_quiet_NaN;
34597403Sobrien  const bool numeric_limits<long long>::has_signaling_NaN;
34697403Sobrien  const float_denorm_style numeric_limits<long long>::has_denorm;
34797403Sobrien  const bool numeric_limits<long long>::has_denorm_loss;
34897403Sobrien  const bool numeric_limits<long long>::is_iec559;
34997403Sobrien  const bool numeric_limits<long long>::is_bounded;
35097403Sobrien  const bool numeric_limits<long long>::is_modulo;
35197403Sobrien  const bool numeric_limits<long long>::traps;
35297403Sobrien  const bool numeric_limits<long long>::tinyness_before;
35397403Sobrien  const float_round_style numeric_limits<long long>::round_style;
35497403Sobrien
35597403Sobrien  const bool numeric_limits<unsigned long long>::is_specialized;
35697403Sobrien  const int  numeric_limits<unsigned long long>::digits;
35797403Sobrien  const int  numeric_limits<unsigned long long>::digits10;
35897403Sobrien  const bool numeric_limits<unsigned long long>::is_signed;
35997403Sobrien  const bool numeric_limits<unsigned long long>::is_integer;
36097403Sobrien  const bool numeric_limits<unsigned long long>::is_exact;
36197403Sobrien  const int  numeric_limits<unsigned long long>::radix;
36297403Sobrien  const int  numeric_limits<unsigned long long>::min_exponent;
36397403Sobrien  const int  numeric_limits<unsigned long long>::min_exponent10;
36497403Sobrien  const int  numeric_limits<unsigned long long>::max_exponent;
36597403Sobrien  const int  numeric_limits<unsigned long long>::max_exponent10;
36697403Sobrien  const bool numeric_limits<unsigned long long>::has_infinity;
36797403Sobrien  const bool numeric_limits<unsigned long long>::has_quiet_NaN;
36897403Sobrien  const bool numeric_limits<unsigned long long>::has_signaling_NaN;
36997403Sobrien  const float_denorm_style numeric_limits<unsigned long long>::has_denorm;
37097403Sobrien  const bool numeric_limits<unsigned long long>::has_denorm_loss;
37197403Sobrien  const bool numeric_limits<unsigned long long>::is_iec559;
37297403Sobrien  const bool numeric_limits<unsigned long long>::is_bounded;
37397403Sobrien  const bool numeric_limits<unsigned long long>::is_modulo;
37497403Sobrien  const bool numeric_limits<unsigned long long>::traps;
37597403Sobrien  const bool numeric_limits<unsigned long long>::tinyness_before;
37697403Sobrien  const float_round_style numeric_limits<unsigned long long>::round_style;
37797403Sobrien
37897403Sobrien  // float
37997403Sobrien  const bool numeric_limits<float>::is_specialized;
38097403Sobrien  const int  numeric_limits<float>::digits;
38197403Sobrien  const int  numeric_limits<float>::digits10;
38297403Sobrien  const bool numeric_limits<float>::is_signed;
38397403Sobrien  const bool numeric_limits<float>::is_integer;
38497403Sobrien  const bool numeric_limits<float>::is_exact;
38597403Sobrien  const int  numeric_limits<float>::radix;
38697403Sobrien  const int  numeric_limits<float>::min_exponent;
38797403Sobrien  const int  numeric_limits<float>::min_exponent10;
38897403Sobrien  const int  numeric_limits<float>::max_exponent;
38997403Sobrien  const int  numeric_limits<float>::max_exponent10;
39097403Sobrien  const bool numeric_limits<float>::has_infinity;
39197403Sobrien  const bool numeric_limits<float>::has_quiet_NaN;
39297403Sobrien  const bool numeric_limits<float>::has_signaling_NaN;
39397403Sobrien  const float_denorm_style numeric_limits<float>::has_denorm;
39497403Sobrien  const bool numeric_limits<float>::has_denorm_loss;
39597403Sobrien  const bool numeric_limits<float>::is_iec559;
39697403Sobrien  const bool numeric_limits<float>::is_bounded;
39797403Sobrien  const bool numeric_limits<float>::is_modulo;
39897403Sobrien  const bool numeric_limits<float>::traps;
39997403Sobrien  const bool numeric_limits<float>::tinyness_before;
40097403Sobrien  const float_round_style numeric_limits<float>::round_style;
40197403Sobrien
40297403Sobrien  // double
40397403Sobrien  const bool numeric_limits<double>::is_specialized;
40497403Sobrien  const int  numeric_limits<double>::digits;
40597403Sobrien  const int  numeric_limits<double>::digits10;
40697403Sobrien  const bool numeric_limits<double>::is_signed;
40797403Sobrien  const bool numeric_limits<double>::is_integer;
40897403Sobrien  const bool numeric_limits<double>::is_exact;
40997403Sobrien  const int  numeric_limits<double>::radix;
41097403Sobrien  const int  numeric_limits<double>::min_exponent;
41197403Sobrien  const int  numeric_limits<double>::min_exponent10;
41297403Sobrien  const int  numeric_limits<double>::max_exponent;
41397403Sobrien  const int  numeric_limits<double>::max_exponent10;
41497403Sobrien  const bool numeric_limits<double>::has_infinity;
41597403Sobrien  const bool numeric_limits<double>::has_quiet_NaN;
41697403Sobrien  const bool numeric_limits<double>::has_signaling_NaN;
41797403Sobrien  const float_denorm_style numeric_limits<double>::has_denorm;
41897403Sobrien  const bool numeric_limits<double>::has_denorm_loss;
41997403Sobrien  const bool numeric_limits<double>::is_iec559;
42097403Sobrien  const bool numeric_limits<double>::is_bounded;
42197403Sobrien  const bool numeric_limits<double>::is_modulo;
42297403Sobrien  const bool numeric_limits<double>::traps;
42397403Sobrien  const bool numeric_limits<double>::tinyness_before;
42497403Sobrien  const float_round_style numeric_limits<double>::round_style;
42597403Sobrien
42697403Sobrien  // long double
42797403Sobrien  const bool numeric_limits<long double>::is_specialized;
42897403Sobrien  const int  numeric_limits<long double>::digits;
42997403Sobrien  const int  numeric_limits<long double>::digits10;
43097403Sobrien  const bool numeric_limits<long double>::is_signed;
43197403Sobrien  const bool numeric_limits<long double>::is_integer;
43297403Sobrien  const bool numeric_limits<long double>::is_exact;
43397403Sobrien  const int  numeric_limits<long double>::radix;
43497403Sobrien  const int  numeric_limits<long double>::min_exponent;
43597403Sobrien  const int  numeric_limits<long double>::min_exponent10;
43697403Sobrien  const int  numeric_limits<long double>::max_exponent;
43797403Sobrien  const int  numeric_limits<long double>::max_exponent10;
43897403Sobrien  const bool numeric_limits<long double>::has_infinity;
43997403Sobrien  const bool numeric_limits<long double>::has_quiet_NaN;
44097403Sobrien  const bool numeric_limits<long double>::has_signaling_NaN;
44197403Sobrien  const float_denorm_style numeric_limits<long double>::has_denorm;
44297403Sobrien  const bool numeric_limits<long double>::has_denorm_loss;
44397403Sobrien  const bool numeric_limits<long double>::is_iec559;
44497403Sobrien  const bool numeric_limits<long double>::is_bounded;
44597403Sobrien  const bool numeric_limits<long double>::is_modulo;
44697403Sobrien  const bool numeric_limits<long double>::traps;
44797403Sobrien  const bool numeric_limits<long double>::tinyness_before;
44897403Sobrien  const float_round_style numeric_limits<long double>::round_style;
449169691Skan
450169691Skan_GLIBCXX_END_NAMESPACE
451169691Skan
452169691Skan// XXX GLIBCXX_ABI Deprecated
453169691Skan#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
454169691Skan
455169691Skan#define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \
456169691Skan  extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \
457169691Skan  __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E")))
458169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14);
459169691Skan_GLIBCXX_NUM_LIM_COMPAT (int, digits, 6);
460169691Skan_GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8);
461169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9);
462169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10);
463169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8);
464169691Skan_GLIBCXX_NUM_LIM_COMPAT (int, radix, 5);
465169691Skan_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12);
466169691Skan_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14);
467169691Skan_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12);
468169691Skan_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14);
469169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12);
470169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13);
471169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17);
472169691Skan_GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10);
473169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15);
474169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9);
475169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10);
476169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9);
477169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5);
478169691Skan_GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15);
479169691Skan_GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11);
480169691Skan
481169691Skan#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
482