limits.cc revision 296373
1252190Srpaulo// Static data members of -*- C++ -*- numeric_limits classes
2252190Srpaulo
3252190Srpaulo// Copyright (C) 1999, 2001, 2002, 2005, 2006 Free Software Foundation, Inc.
4252190Srpaulo//
5252190Srpaulo// This file is part of the GNU ISO C++ Library.  This library is free
6252190Srpaulo// software; you can redistribute it and/or modify it under the
7252190Srpaulo// terms of the GNU General Public License as published by the
8252190Srpaulo// Free Software Foundation; either version 2, or (at your option)
9252190Srpaulo// any later version.
10252190Srpaulo
11252190Srpaulo// This library is distributed in the hope that it will be useful,
12252190Srpaulo// but WITHOUT ANY WARRANTY; without even the implied warranty of
13252190Srpaulo// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14252190Srpaulo// GNU General Public License for more details.
15252190Srpaulo
16252190Srpaulo// You should have received a copy of the GNU General Public License along
17252190Srpaulo// with this library; see the file COPYING.  If not, write to the Free
18252190Srpaulo// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19252190Srpaulo// USA.
20252190Srpaulo
21252190Srpaulo// As a special exception, you may use this file as part of a free software
22252190Srpaulo// library without restriction.  Specifically, if other files instantiate
23252190Srpaulo// templates or use macros or inline functions from this file, or you compile
24252190Srpaulo// this file and link it with other files to produce an executable, this
25252190Srpaulo// file does not by itself cause the resulting executable to be covered by
26252190Srpaulo// the GNU General Public License.  This exception does not however
27252190Srpaulo// invalidate any other reasons why the executable file might be covered by
28252190Srpaulo// the GNU General Public License.
29252190Srpaulo
30252190Srpaulo// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
31252190Srpaulo
32252190Srpaulo//
33252190Srpaulo// ISO C++ 14882:1998
34252190Srpaulo// 18.2.1
35252190Srpaulo//
36252190Srpaulo
37252190Srpaulo#include <limits>
38252190Srpaulo
39252190Srpaulo_GLIBCXX_BEGIN_NAMESPACE(std)
40252190Srpaulo
41252190Srpaulo  const bool __numeric_limits_base::is_specialized;
42252190Srpaulo  const int  __numeric_limits_base::digits;
43252190Srpaulo  const int  __numeric_limits_base::digits10;
44252190Srpaulo  const bool __numeric_limits_base::is_signed;
45252190Srpaulo  const bool __numeric_limits_base::is_integer;
46252190Srpaulo  const bool __numeric_limits_base::is_exact;
47252190Srpaulo  const int  __numeric_limits_base::radix;
48252190Srpaulo  const int  __numeric_limits_base::min_exponent;
49252190Srpaulo  const int  __numeric_limits_base::min_exponent10;
50252190Srpaulo  const int  __numeric_limits_base::max_exponent;
51252190Srpaulo  const int  __numeric_limits_base::max_exponent10;
52252190Srpaulo  const bool __numeric_limits_base::has_infinity;
53252190Srpaulo  const bool __numeric_limits_base::has_quiet_NaN;
54252190Srpaulo  const bool __numeric_limits_base::has_signaling_NaN;
55252190Srpaulo  const float_denorm_style __numeric_limits_base::has_denorm;
56252190Srpaulo  const bool __numeric_limits_base::has_denorm_loss;
57252190Srpaulo  const bool __numeric_limits_base::is_iec559;
58252190Srpaulo  const bool __numeric_limits_base::is_bounded;
59252190Srpaulo  const bool __numeric_limits_base::is_modulo;
60252190Srpaulo  const bool __numeric_limits_base::traps;
61252190Srpaulo  const bool __numeric_limits_base::tinyness_before;
62252190Srpaulo  const float_round_style __numeric_limits_base::round_style;
63252190Srpaulo
64252190Srpaulo  // bool
65252190Srpaulo  const bool numeric_limits<bool>::is_specialized;
66252190Srpaulo  const int  numeric_limits<bool>::digits;
67252190Srpaulo  const int  numeric_limits<bool>::digits10;
68252190Srpaulo  const bool numeric_limits<bool>::is_signed;
69252190Srpaulo  const bool numeric_limits<bool>::is_integer;
70252190Srpaulo  const bool numeric_limits<bool>::is_exact;
71252190Srpaulo  const int  numeric_limits<bool>::radix;
72252190Srpaulo  const int  numeric_limits<bool>::min_exponent;
73252190Srpaulo  const int  numeric_limits<bool>::min_exponent10;
74252190Srpaulo  const int  numeric_limits<bool>::max_exponent;
75252190Srpaulo  const int  numeric_limits<bool>::max_exponent10;
76252190Srpaulo  const bool numeric_limits<bool>::has_infinity;
77252190Srpaulo  const bool numeric_limits<bool>::has_quiet_NaN;
78252190Srpaulo  const bool numeric_limits<bool>::has_signaling_NaN;
79252190Srpaulo  const float_denorm_style numeric_limits<bool>::has_denorm;
80252190Srpaulo  const bool numeric_limits<bool>::has_denorm_loss;
81252190Srpaulo  const bool numeric_limits<bool>::is_iec559;
82252190Srpaulo  const bool numeric_limits<bool>::is_bounded;
83252190Srpaulo  const bool numeric_limits<bool>::is_modulo;
84252190Srpaulo  const bool numeric_limits<bool>::traps;
85252190Srpaulo  const bool numeric_limits<bool>::tinyness_before;
86252190Srpaulo  const float_round_style numeric_limits<bool>::round_style;
87252190Srpaulo
88252190Srpaulo  // char
89252190Srpaulo  const bool numeric_limits<char>::is_specialized;
90252190Srpaulo  const int  numeric_limits<char>::digits;
91252190Srpaulo  const int  numeric_limits<char>::digits10;
92252190Srpaulo  const bool numeric_limits<char>::is_signed;
93252190Srpaulo  const bool numeric_limits<char>::is_integer;
94252190Srpaulo  const bool numeric_limits<char>::is_exact;
95252190Srpaulo  const int  numeric_limits<char>::radix;
96252190Srpaulo  const int  numeric_limits<char>::min_exponent;
97252190Srpaulo  const int  numeric_limits<char>::min_exponent10;
98252190Srpaulo  const int  numeric_limits<char>::max_exponent;
99252190Srpaulo  const int  numeric_limits<char>::max_exponent10;
100252190Srpaulo  const bool numeric_limits<char>::has_infinity;
101252190Srpaulo  const bool numeric_limits<char>::has_quiet_NaN;
102252190Srpaulo  const bool numeric_limits<char>::has_signaling_NaN;
103252190Srpaulo  const float_denorm_style numeric_limits<char>::has_denorm;
104252190Srpaulo  const bool numeric_limits<char>::has_denorm_loss;
105252190Srpaulo  const bool numeric_limits<char>::is_iec559;
106252190Srpaulo  const bool numeric_limits<char>::is_bounded;
107252190Srpaulo  const bool numeric_limits<char>::is_modulo;
108252190Srpaulo  const bool numeric_limits<char>::traps;
109252190Srpaulo  const bool numeric_limits<char>::tinyness_before;
110252190Srpaulo  const float_round_style numeric_limits<char>::round_style;
111252190Srpaulo
112252190Srpaulo  // signed char
113252190Srpaulo  const bool numeric_limits<signed char>::is_specialized;
114252190Srpaulo  const int  numeric_limits<signed char>::digits;
115252190Srpaulo  const int  numeric_limits<signed char>::digits10;
116252190Srpaulo  const bool numeric_limits<signed char>::is_signed;
117252190Srpaulo  const bool numeric_limits<signed char>::is_integer;
118252190Srpaulo  const bool numeric_limits<signed char>::is_exact;
119252190Srpaulo  const int  numeric_limits<signed char>::radix;
120252190Srpaulo  const int  numeric_limits<signed char>::min_exponent;
121252190Srpaulo  const int  numeric_limits<signed char>::min_exponent10;
122252190Srpaulo  const int  numeric_limits<signed char>::max_exponent;
123252190Srpaulo  const int  numeric_limits<signed char>::max_exponent10;
124252190Srpaulo  const bool numeric_limits<signed char>::has_infinity;
125252190Srpaulo  const bool numeric_limits<signed char>::has_quiet_NaN;
126252190Srpaulo  const bool numeric_limits<signed char>::has_signaling_NaN;
127252190Srpaulo  const float_denorm_style numeric_limits<signed char>::has_denorm;
128252190Srpaulo  const bool numeric_limits<signed char>::has_denorm_loss;
129252190Srpaulo  const bool numeric_limits<signed char>::is_iec559;
130252190Srpaulo  const bool numeric_limits<signed char>::is_bounded;
131252190Srpaulo  const bool numeric_limits<signed char>::is_modulo;
132252190Srpaulo  const bool numeric_limits<signed char>::traps;
133252190Srpaulo  const bool numeric_limits<signed char>::tinyness_before;
134252190Srpaulo  const float_round_style numeric_limits<signed char>::round_style;
135252190Srpaulo
136252190Srpaulo  // unsigned char
137252190Srpaulo  const bool numeric_limits<unsigned char>::is_specialized;
138252190Srpaulo  const int  numeric_limits<unsigned char>::digits;
139252190Srpaulo  const int  numeric_limits<unsigned char>::digits10;
140252190Srpaulo  const bool numeric_limits<unsigned char>::is_signed;
141252190Srpaulo  const bool numeric_limits<unsigned char>::is_integer;
142252190Srpaulo  const bool numeric_limits<unsigned char>::is_exact;
143252190Srpaulo  const int  numeric_limits<unsigned char>::radix;
144252190Srpaulo  const int  numeric_limits<unsigned char>::min_exponent;
145252190Srpaulo  const int  numeric_limits<unsigned char>::min_exponent10;
146252190Srpaulo  const int  numeric_limits<unsigned char>::max_exponent;
147252190Srpaulo  const int  numeric_limits<unsigned char>::max_exponent10;
148252190Srpaulo  const bool numeric_limits<unsigned char>::has_infinity;
149252190Srpaulo  const bool numeric_limits<unsigned char>::has_quiet_NaN;
150252190Srpaulo  const bool numeric_limits<unsigned char>::has_signaling_NaN;
151252190Srpaulo  const float_denorm_style numeric_limits<unsigned char>::has_denorm;
152252190Srpaulo  const bool numeric_limits<unsigned char>::has_denorm_loss;
153252190Srpaulo  const bool numeric_limits<unsigned char>::is_iec559;
154252190Srpaulo  const bool numeric_limits<unsigned char>::is_bounded;
155252190Srpaulo  const bool numeric_limits<unsigned char>::is_modulo;
156252190Srpaulo  const bool numeric_limits<unsigned char>::traps;
157252190Srpaulo  const bool numeric_limits<unsigned char>::tinyness_before;
158252190Srpaulo  const float_round_style numeric_limits<unsigned char>::round_style;
159252190Srpaulo
160252190Srpaulo  // wchar_t
161252190Srpaulo  // This used to be problematic...
162252190Srpaulo#ifdef _GLIBCXX_USE_WCHAR_T
163252190Srpaulo  const bool numeric_limits<wchar_t>::is_specialized;
164252190Srpaulo  const int  numeric_limits<wchar_t>::digits;
165252190Srpaulo  const int  numeric_limits<wchar_t>::digits10;
166252190Srpaulo  const bool numeric_limits<wchar_t>::is_signed;
167252190Srpaulo  const bool numeric_limits<wchar_t>::is_integer;
168252190Srpaulo  const bool numeric_limits<wchar_t>::is_exact;
169252190Srpaulo  const int  numeric_limits<wchar_t>::radix;
170252190Srpaulo  const int  numeric_limits<wchar_t>::min_exponent;
171252190Srpaulo  const int  numeric_limits<wchar_t>::min_exponent10;
172252190Srpaulo  const int  numeric_limits<wchar_t>::max_exponent;
173252190Srpaulo  const int  numeric_limits<wchar_t>::max_exponent10;
174252190Srpaulo  const bool numeric_limits<wchar_t>::has_infinity;
175252190Srpaulo  const bool numeric_limits<wchar_t>::has_quiet_NaN;
176252190Srpaulo  const bool numeric_limits<wchar_t>::has_signaling_NaN;
177252190Srpaulo  const float_denorm_style numeric_limits<wchar_t>::has_denorm;
178252190Srpaulo  const bool numeric_limits<wchar_t>::has_denorm_loss;
179252190Srpaulo  const bool numeric_limits<wchar_t>::is_iec559;
180252190Srpaulo  const bool numeric_limits<wchar_t>::is_bounded;
181252190Srpaulo  const bool numeric_limits<wchar_t>::is_modulo;
182252190Srpaulo  const bool numeric_limits<wchar_t>::traps;
183252190Srpaulo  const bool numeric_limits<wchar_t>::tinyness_before;
184252190Srpaulo  const float_round_style numeric_limits<wchar_t>::round_style;
185252190Srpaulo#endif // _GLIBCXX_USE_WCHAR_T
186252190Srpaulo
187252190Srpaulo  // short
188252190Srpaulo  const bool numeric_limits<short>::is_specialized;
189252190Srpaulo  const int  numeric_limits<short>::digits;
190252190Srpaulo  const int  numeric_limits<short>::digits10;
191252190Srpaulo  const bool numeric_limits<short>::is_signed;
192252190Srpaulo  const bool numeric_limits<short>::is_integer;
193252190Srpaulo  const bool numeric_limits<short>::is_exact;
194252190Srpaulo  const int  numeric_limits<short>::radix;
195252190Srpaulo  const int  numeric_limits<short>::min_exponent;
196252190Srpaulo  const int  numeric_limits<short>::min_exponent10;
197252190Srpaulo  const int  numeric_limits<short>::max_exponent;
198252190Srpaulo  const int  numeric_limits<short>::max_exponent10;
199252190Srpaulo  const bool numeric_limits<short>::has_infinity;
200252190Srpaulo  const bool numeric_limits<short>::has_quiet_NaN;
201252190Srpaulo  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
450_GLIBCXX_END_NAMESPACE
451
452// XXX GLIBCXX_ABI Deprecated
453#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
454
455#define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \
456  extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \
457  __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E")))
458_GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14);
459_GLIBCXX_NUM_LIM_COMPAT (int, digits, 6);
460_GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8);
461_GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9);
462_GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10);
463_GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8);
464_GLIBCXX_NUM_LIM_COMPAT (int, radix, 5);
465_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12);
466_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14);
467_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12);
468_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14);
469_GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12);
470_GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13);
471_GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17);
472_GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10);
473_GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15);
474_GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9);
475_GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10);
476_GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9);
477_GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5);
478_GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15);
479_GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11);
480
481#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
482