Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. // Static data members of -*- C++ -*- numeric_limits classes
  2.  
  3. // Copyright (C) 1999-2015 Free Software Foundation, Inc.
  4. //
  5. // This file is part of the GNU ISO C++ Library.  This library is free
  6. // software; you can redistribute it and/or modify it under the
  7. // terms of the GNU General Public License as published by the
  8. // Free Software Foundation; either version 3, or (at your option)
  9. // any later version.
  10.  
  11. // This library is distributed in the hope that it will be useful,
  12. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. // GNU General Public License for more details.
  15.  
  16. // Under Section 7 of GPL version 3, you are granted additional
  17. // permissions described in the GCC Runtime Library Exception, version
  18. // 3.1, as published by the Free Software Foundation.
  19.  
  20. // You should have received a copy of the GNU General Public License and
  21. // a copy of the GCC Runtime Library Exception along with this program;
  22. // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  23. // <http://www.gnu.org/licenses/>.
  24.  
  25. // Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
  26.  
  27. //
  28. // ISO C++ 14882:1998
  29. // 18.2.1
  30. //
  31.  
  32. #include <limits>
  33.  
  34. namespace std _GLIBCXX_VISIBILITY(default)
  35. {
  36. _GLIBCXX_BEGIN_NAMESPACE_VERSION
  37.  
  38. #define const _GLIBCXX_USE_CONSTEXPR
  39.  
  40.   const bool __numeric_limits_base::is_specialized;
  41.   const int  __numeric_limits_base::digits;
  42.   const int  __numeric_limits_base::digits10;
  43.   const int  __numeric_limits_base::max_digits10;
  44.   const bool __numeric_limits_base::is_signed;
  45.   const bool __numeric_limits_base::is_integer;
  46.   const bool __numeric_limits_base::is_exact;
  47.   const int  __numeric_limits_base::radix;
  48.   const int  __numeric_limits_base::min_exponent;
  49.   const int  __numeric_limits_base::min_exponent10;
  50.   const int  __numeric_limits_base::max_exponent;
  51.   const int  __numeric_limits_base::max_exponent10;
  52.   const bool __numeric_limits_base::has_infinity;
  53.   const bool __numeric_limits_base::has_quiet_NaN;
  54.   const bool __numeric_limits_base::has_signaling_NaN;
  55.   const float_denorm_style __numeric_limits_base::has_denorm;
  56.   const bool __numeric_limits_base::has_denorm_loss;
  57.   const bool __numeric_limits_base::is_iec559;
  58.   const bool __numeric_limits_base::is_bounded;
  59.   const bool __numeric_limits_base::is_modulo;
  60.   const bool __numeric_limits_base::traps;
  61.   const bool __numeric_limits_base::tinyness_before;
  62.   const float_round_style __numeric_limits_base::round_style;
  63.  
  64.   // bool
  65.   const bool numeric_limits<bool>::is_specialized;
  66.   const int  numeric_limits<bool>::digits;
  67.   const int  numeric_limits<bool>::digits10;
  68.   const int  numeric_limits<bool>::max_digits10;
  69.   const bool numeric_limits<bool>::is_signed;
  70.   const bool numeric_limits<bool>::is_integer;
  71.   const bool numeric_limits<bool>::is_exact;
  72.   const int  numeric_limits<bool>::radix;
  73.   const int  numeric_limits<bool>::min_exponent;
  74.   const int  numeric_limits<bool>::min_exponent10;
  75.   const int  numeric_limits<bool>::max_exponent;
  76.   const int  numeric_limits<bool>::max_exponent10;
  77.   const bool numeric_limits<bool>::has_infinity;
  78.   const bool numeric_limits<bool>::has_quiet_NaN;
  79.   const bool numeric_limits<bool>::has_signaling_NaN;
  80.   const float_denorm_style numeric_limits<bool>::has_denorm;
  81.   const bool numeric_limits<bool>::has_denorm_loss;
  82.   const bool numeric_limits<bool>::is_iec559;
  83.   const bool numeric_limits<bool>::is_bounded;
  84.   const bool numeric_limits<bool>::is_modulo;
  85.   const bool numeric_limits<bool>::traps;
  86.   const bool numeric_limits<bool>::tinyness_before;
  87.   const float_round_style numeric_limits<bool>::round_style;
  88.  
  89.   // char
  90.   const bool numeric_limits<char>::is_specialized;
  91.   const int  numeric_limits<char>::digits;
  92.   const int  numeric_limits<char>::digits10;
  93.   const int  numeric_limits<char>::max_digits10;
  94.   const bool numeric_limits<char>::is_signed;
  95.   const bool numeric_limits<char>::is_integer;
  96.   const bool numeric_limits<char>::is_exact;
  97.   const int  numeric_limits<char>::radix;
  98.   const int  numeric_limits<char>::min_exponent;
  99.   const int  numeric_limits<char>::min_exponent10;
  100.   const int  numeric_limits<char>::max_exponent;
  101.   const int  numeric_limits<char>::max_exponent10;
  102.   const bool numeric_limits<char>::has_infinity;
  103.   const bool numeric_limits<char>::has_quiet_NaN;
  104.   const bool numeric_limits<char>::has_signaling_NaN;
  105.   const float_denorm_style numeric_limits<char>::has_denorm;
  106.   const bool numeric_limits<char>::has_denorm_loss;
  107.   const bool numeric_limits<char>::is_iec559;
  108.   const bool numeric_limits<char>::is_bounded;
  109.   const bool numeric_limits<char>::is_modulo;
  110.   const bool numeric_limits<char>::traps;
  111.   const bool numeric_limits<char>::tinyness_before;
  112.   const float_round_style numeric_limits<char>::round_style;
  113.  
  114.   // signed char
  115.   const bool numeric_limits<signed char>::is_specialized;
  116.   const int  numeric_limits<signed char>::digits;
  117.   const int  numeric_limits<signed char>::digits10;
  118.   const int  numeric_limits<signed char>::max_digits10;
  119.   const bool numeric_limits<signed char>::is_signed;
  120.   const bool numeric_limits<signed char>::is_integer;
  121.   const bool numeric_limits<signed char>::is_exact;
  122.   const int  numeric_limits<signed char>::radix;
  123.   const int  numeric_limits<signed char>::min_exponent;
  124.   const int  numeric_limits<signed char>::min_exponent10;
  125.   const int  numeric_limits<signed char>::max_exponent;
  126.   const int  numeric_limits<signed char>::max_exponent10;
  127.   const bool numeric_limits<signed char>::has_infinity;
  128.   const bool numeric_limits<signed char>::has_quiet_NaN;
  129.   const bool numeric_limits<signed char>::has_signaling_NaN;
  130.   const float_denorm_style numeric_limits<signed char>::has_denorm;
  131.   const bool numeric_limits<signed char>::has_denorm_loss;
  132.   const bool numeric_limits<signed char>::is_iec559;
  133.   const bool numeric_limits<signed char>::is_bounded;
  134.   const bool numeric_limits<signed char>::is_modulo;
  135.   const bool numeric_limits<signed char>::traps;
  136.   const bool numeric_limits<signed char>::tinyness_before;
  137.   const float_round_style numeric_limits<signed char>::round_style;
  138.  
  139.   // unsigned char
  140.   const bool numeric_limits<unsigned char>::is_specialized;
  141.   const int  numeric_limits<unsigned char>::digits;
  142.   const int  numeric_limits<unsigned char>::digits10;
  143.   const int  numeric_limits<unsigned char>::max_digits10;
  144.   const bool numeric_limits<unsigned char>::is_signed;
  145.   const bool numeric_limits<unsigned char>::is_integer;
  146.   const bool numeric_limits<unsigned char>::is_exact;
  147.   const int  numeric_limits<unsigned char>::radix;
  148.   const int  numeric_limits<unsigned char>::min_exponent;
  149.   const int  numeric_limits<unsigned char>::min_exponent10;
  150.   const int  numeric_limits<unsigned char>::max_exponent;
  151.   const int  numeric_limits<unsigned char>::max_exponent10;
  152.   const bool numeric_limits<unsigned char>::has_infinity;
  153.   const bool numeric_limits<unsigned char>::has_quiet_NaN;
  154.   const bool numeric_limits<unsigned char>::has_signaling_NaN;
  155.   const float_denorm_style numeric_limits<unsigned char>::has_denorm;
  156.   const bool numeric_limits<unsigned char>::has_denorm_loss;
  157.   const bool numeric_limits<unsigned char>::is_iec559;
  158.   const bool numeric_limits<unsigned char>::is_bounded;
  159.   const bool numeric_limits<unsigned char>::is_modulo;
  160.   const bool numeric_limits<unsigned char>::traps;
  161.   const bool numeric_limits<unsigned char>::tinyness_before;
  162.   const float_round_style numeric_limits<unsigned char>::round_style;
  163.  
  164.   // wchar_t
  165.   // This used to be problematic...
  166. #ifdef _GLIBCXX_USE_WCHAR_T  
  167.   const bool numeric_limits<wchar_t>::is_specialized;
  168.   const int  numeric_limits<wchar_t>::digits;
  169.   const int  numeric_limits<wchar_t>::digits10;
  170.   const int  numeric_limits<wchar_t>::max_digits10;
  171.   const bool numeric_limits<wchar_t>::is_signed;
  172.   const bool numeric_limits<wchar_t>::is_integer;
  173.   const bool numeric_limits<wchar_t>::is_exact;
  174.   const int  numeric_limits<wchar_t>::radix;
  175.   const int  numeric_limits<wchar_t>::min_exponent;
  176.   const int  numeric_limits<wchar_t>::min_exponent10;
  177.   const int  numeric_limits<wchar_t>::max_exponent;
  178.   const int  numeric_limits<wchar_t>::max_exponent10;
  179.   const bool numeric_limits<wchar_t>::has_infinity;
  180.   const bool numeric_limits<wchar_t>::has_quiet_NaN;
  181.   const bool numeric_limits<wchar_t>::has_signaling_NaN;
  182.   const float_denorm_style numeric_limits<wchar_t>::has_denorm;
  183.   const bool numeric_limits<wchar_t>::has_denorm_loss;
  184.   const bool numeric_limits<wchar_t>::is_iec559;
  185.   const bool numeric_limits<wchar_t>::is_bounded;
  186.   const bool numeric_limits<wchar_t>::is_modulo;
  187.   const bool numeric_limits<wchar_t>::traps;
  188.   const bool numeric_limits<wchar_t>::tinyness_before;
  189.   const float_round_style numeric_limits<wchar_t>::round_style;
  190. #endif // _GLIBCXX_USE_WCHAR_T
  191.  
  192.   // short
  193.   const bool numeric_limits<short>::is_specialized;
  194.   const int  numeric_limits<short>::digits;
  195.   const int  numeric_limits<short>::digits10;
  196.   const int  numeric_limits<short>::max_digits10;
  197.   const bool numeric_limits<short>::is_signed;
  198.   const bool numeric_limits<short>::is_integer;
  199.   const bool numeric_limits<short>::is_exact;
  200.   const int  numeric_limits<short>::radix;
  201.   const int  numeric_limits<short>::min_exponent;
  202.   const int  numeric_limits<short>::min_exponent10;
  203.   const int  numeric_limits<short>::max_exponent;
  204.   const int  numeric_limits<short>::max_exponent10;
  205.   const bool numeric_limits<short>::has_infinity;
  206.   const bool numeric_limits<short>::has_quiet_NaN;
  207.   const bool numeric_limits<short>::has_signaling_NaN;
  208.   const float_denorm_style numeric_limits<short>::has_denorm;
  209.   const bool numeric_limits<short>::has_denorm_loss;
  210.   const bool numeric_limits<short>::is_iec559;
  211.   const bool numeric_limits<short>::is_bounded;
  212.   const bool numeric_limits<short>::is_modulo;
  213.   const bool numeric_limits<short>::traps;
  214.   const bool numeric_limits<short>::tinyness_before;
  215.   const float_round_style numeric_limits<short>::round_style;
  216.  
  217.   // unsigned short
  218.   const bool numeric_limits<unsigned short>::is_specialized;
  219.   const int  numeric_limits<unsigned short>::digits;
  220.   const int  numeric_limits<unsigned short>::digits10;
  221.   const int  numeric_limits<unsigned short>::max_digits10;
  222.   const bool numeric_limits<unsigned short>::is_signed;
  223.   const bool numeric_limits<unsigned short>::is_integer;
  224.   const bool numeric_limits<unsigned short>::is_exact;
  225.   const int  numeric_limits<unsigned short>::radix;
  226.   const int  numeric_limits<unsigned short>::min_exponent;
  227.   const int  numeric_limits<unsigned short>::min_exponent10;
  228.   const int  numeric_limits<unsigned short>::max_exponent;
  229.   const int  numeric_limits<unsigned short>::max_exponent10;
  230.   const bool numeric_limits<unsigned short>::has_infinity;
  231.   const bool numeric_limits<unsigned short>::has_quiet_NaN;
  232.   const bool numeric_limits<unsigned short>::has_signaling_NaN;
  233.   const float_denorm_style numeric_limits<unsigned short>::has_denorm;
  234.   const bool numeric_limits<unsigned short>::has_denorm_loss;
  235.   const bool numeric_limits<unsigned short>::is_iec559;
  236.   const bool numeric_limits<unsigned short>::is_bounded;
  237.   const bool numeric_limits<unsigned short>::is_modulo;
  238.   const bool numeric_limits<unsigned short>::traps;
  239.   const bool numeric_limits<unsigned short>::tinyness_before;
  240.   const float_round_style numeric_limits<unsigned short>::round_style;
  241.  
  242.   // int
  243.   const bool numeric_limits<int>::is_specialized;
  244.   const int  numeric_limits<int>::digits;
  245.   const int  numeric_limits<int>::digits10;
  246.   const int  numeric_limits<int>::max_digits10;
  247.   const bool numeric_limits<int>::is_signed;
  248.   const bool numeric_limits<int>::is_integer;
  249.   const bool numeric_limits<int>::is_exact;
  250.   const int  numeric_limits<int>::radix;
  251.   const int  numeric_limits<int>::min_exponent;
  252.   const int  numeric_limits<int>::min_exponent10;
  253.   const int  numeric_limits<int>::max_exponent;
  254.   const int  numeric_limits<int>::max_exponent10;
  255.   const bool numeric_limits<int>::has_infinity;
  256.   const bool numeric_limits<int>::has_quiet_NaN;
  257.   const bool numeric_limits<int>::has_signaling_NaN;
  258.   const float_denorm_style numeric_limits<int>::has_denorm;
  259.   const bool numeric_limits<int>::has_denorm_loss;
  260.   const bool numeric_limits<int>::is_iec559;
  261.   const bool numeric_limits<int>::is_bounded;
  262.   const bool numeric_limits<int>::is_modulo;
  263.   const bool numeric_limits<int>::traps;
  264.   const bool numeric_limits<int>::tinyness_before;
  265.   const float_round_style numeric_limits<int>::round_style;
  266.  
  267.   // unsigned int
  268.   const bool numeric_limits<unsigned int>::is_specialized;
  269.   const int  numeric_limits<unsigned int>::digits;
  270.   const int  numeric_limits<unsigned int>::digits10;
  271.   const int  numeric_limits<unsigned int>::max_digits10;
  272.   const bool numeric_limits<unsigned int>::is_signed;
  273.   const bool numeric_limits<unsigned int>::is_integer;
  274.   const bool numeric_limits<unsigned int>::is_exact;
  275.   const int  numeric_limits<unsigned int>::radix;
  276.   const int  numeric_limits<unsigned int>::min_exponent;
  277.   const int  numeric_limits<unsigned int>::min_exponent10;
  278.   const int  numeric_limits<unsigned int>::max_exponent;
  279.   const int  numeric_limits<unsigned int>::max_exponent10;
  280.   const bool numeric_limits<unsigned int>::has_infinity;
  281.   const bool numeric_limits<unsigned int>::has_quiet_NaN;
  282.   const bool numeric_limits<unsigned int>::has_signaling_NaN;
  283.   const float_denorm_style numeric_limits<unsigned int>::has_denorm;
  284.   const bool numeric_limits<unsigned int>::has_denorm_loss;
  285.   const bool numeric_limits<unsigned int>::is_iec559;
  286.   const bool numeric_limits<unsigned int>::is_bounded;
  287.   const bool numeric_limits<unsigned int>::is_modulo;
  288.   const bool numeric_limits<unsigned int>::traps;
  289.   const bool numeric_limits<unsigned int>::tinyness_before;
  290.   const float_round_style numeric_limits<unsigned int>::round_style;
  291.  
  292.   // long
  293.   const bool numeric_limits<long>::is_specialized;
  294.   const int  numeric_limits<long>::digits;
  295.   const int  numeric_limits<long>::digits10;
  296.   const int  numeric_limits<long>::max_digits10;
  297.   const bool numeric_limits<long>::is_signed;
  298.   const bool numeric_limits<long>::is_integer;
  299.   const bool numeric_limits<long>::is_exact;
  300.   const int  numeric_limits<long>::radix;
  301.   const int  numeric_limits<long>::min_exponent;
  302.   const int  numeric_limits<long>::min_exponent10;
  303.   const int  numeric_limits<long>::max_exponent;
  304.   const int  numeric_limits<long>::max_exponent10;
  305.   const bool numeric_limits<long>::has_infinity;
  306.   const bool numeric_limits<long>::has_quiet_NaN;
  307.   const bool numeric_limits<long>::has_signaling_NaN;
  308.   const float_denorm_style numeric_limits<long>::has_denorm;
  309.   const bool numeric_limits<long>::has_denorm_loss;
  310.   const bool numeric_limits<long>::is_iec559;
  311.   const bool numeric_limits<long>::is_bounded;
  312.   const bool numeric_limits<long>::is_modulo;
  313.   const bool numeric_limits<long>::traps;
  314.   const bool numeric_limits<long>::tinyness_before;
  315.   const float_round_style numeric_limits<long>::round_style;
  316.  
  317.   // unsigned long
  318.   const bool numeric_limits<unsigned long>::is_specialized;
  319.   const int  numeric_limits<unsigned long>::digits;
  320.   const int  numeric_limits<unsigned long>::digits10;
  321.   const int  numeric_limits<unsigned long>::max_digits10;
  322.   const bool numeric_limits<unsigned long>::is_signed;
  323.   const bool numeric_limits<unsigned long>::is_integer;
  324.   const bool numeric_limits<unsigned long>::is_exact;
  325.   const int  numeric_limits<unsigned long>::radix;
  326.   const int  numeric_limits<unsigned long>::min_exponent;
  327.   const int  numeric_limits<unsigned long>::min_exponent10;
  328.   const int  numeric_limits<unsigned long>::max_exponent;
  329.   const int  numeric_limits<unsigned long>::max_exponent10;
  330.   const bool numeric_limits<unsigned long>::has_infinity;
  331.   const bool numeric_limits<unsigned long>::has_quiet_NaN;
  332.   const bool numeric_limits<unsigned long>::has_signaling_NaN;
  333.   const float_denorm_style numeric_limits<unsigned long>::has_denorm;
  334.   const bool numeric_limits<unsigned long>::has_denorm_loss;
  335.   const bool numeric_limits<unsigned long>::is_iec559;
  336.   const bool numeric_limits<unsigned long>::is_bounded;
  337.   const bool numeric_limits<unsigned long>::is_modulo;
  338.   const bool numeric_limits<unsigned long>::traps;
  339.   const bool numeric_limits<unsigned long>::tinyness_before;
  340.   const float_round_style numeric_limits<unsigned long>::round_style;
  341.  
  342.   // NOTA BENE:  long long is an extension
  343.   const bool numeric_limits<long long>::is_specialized;
  344.   const int  numeric_limits<long long>::digits;
  345.   const int  numeric_limits<long long>::digits10;
  346.   const int  numeric_limits<long long>::max_digits10;
  347.   const bool numeric_limits<long long>::is_signed;
  348.   const bool numeric_limits<long long>::is_integer;
  349.   const bool numeric_limits<long long>::is_exact;
  350.   const int  numeric_limits<long long>::radix;
  351.   const int  numeric_limits<long long>::min_exponent;
  352.   const int  numeric_limits<long long>::min_exponent10;
  353.   const int  numeric_limits<long long>::max_exponent;
  354.   const int  numeric_limits<long long>::max_exponent10;
  355.   const bool numeric_limits<long long>::has_infinity;
  356.   const bool numeric_limits<long long>::has_quiet_NaN;
  357.   const bool numeric_limits<long long>::has_signaling_NaN;
  358.   const float_denorm_style numeric_limits<long long>::has_denorm;
  359.   const bool numeric_limits<long long>::has_denorm_loss;
  360.   const bool numeric_limits<long long>::is_iec559;
  361.   const bool numeric_limits<long long>::is_bounded;
  362.   const bool numeric_limits<long long>::is_modulo;
  363.   const bool numeric_limits<long long>::traps;
  364.   const bool numeric_limits<long long>::tinyness_before;
  365.   const float_round_style numeric_limits<long long>::round_style;
  366.  
  367.   const bool numeric_limits<unsigned long long>::is_specialized;
  368.   const int  numeric_limits<unsigned long long>::digits;
  369.   const int  numeric_limits<unsigned long long>::digits10;
  370.   const int  numeric_limits<unsigned long long>::max_digits10;
  371.   const bool numeric_limits<unsigned long long>::is_signed;
  372.   const bool numeric_limits<unsigned long long>::is_integer;
  373.   const bool numeric_limits<unsigned long long>::is_exact;
  374.   const int  numeric_limits<unsigned long long>::radix;
  375.   const int  numeric_limits<unsigned long long>::min_exponent;
  376.   const int  numeric_limits<unsigned long long>::min_exponent10;
  377.   const int  numeric_limits<unsigned long long>::max_exponent;
  378.   const int  numeric_limits<unsigned long long>::max_exponent10;
  379.   const bool numeric_limits<unsigned long long>::has_infinity;
  380.   const bool numeric_limits<unsigned long long>::has_quiet_NaN;
  381.   const bool numeric_limits<unsigned long long>::has_signaling_NaN;
  382.   const float_denorm_style numeric_limits<unsigned long long>::has_denorm;
  383.   const bool numeric_limits<unsigned long long>::has_denorm_loss;
  384.   const bool numeric_limits<unsigned long long>::is_iec559;
  385.   const bool numeric_limits<unsigned long long>::is_bounded;
  386.   const bool numeric_limits<unsigned long long>::is_modulo;
  387.   const bool numeric_limits<unsigned long long>::traps;
  388.   const bool numeric_limits<unsigned long long>::tinyness_before;
  389.   const float_round_style numeric_limits<unsigned long long>::round_style;
  390.  
  391. #define INT_N(__INT_N_TYPE)                                                     \
  392.   const bool numeric_limits<__INT_N_TYPE>::is_specialized;                      \
  393.   const int  numeric_limits<__INT_N_TYPE>::digits;                              \
  394.   const int  numeric_limits<__INT_N_TYPE>::digits10;                            \
  395.   const int  numeric_limits<__INT_N_TYPE>::max_digits10;                        \
  396.   const bool numeric_limits<__INT_N_TYPE>::is_signed;                           \
  397.   const bool numeric_limits<__INT_N_TYPE>::is_integer;                          \
  398.   const bool numeric_limits<__INT_N_TYPE>::is_exact;                            \
  399.   const int  numeric_limits<__INT_N_TYPE>::radix;                               \
  400.   const int  numeric_limits<__INT_N_TYPE>::min_exponent;                        \
  401.   const int  numeric_limits<__INT_N_TYPE>::min_exponent10;                      \
  402.   const int  numeric_limits<__INT_N_TYPE>::max_exponent;                        \
  403.   const int  numeric_limits<__INT_N_TYPE>::max_exponent10;                      \
  404.   const bool numeric_limits<__INT_N_TYPE>::has_infinity;                        \
  405.   const bool numeric_limits<__INT_N_TYPE>::has_quiet_NaN;                       \
  406.   const bool numeric_limits<__INT_N_TYPE>::has_signaling_NaN;                   \
  407.   const float_denorm_style numeric_limits<__INT_N_TYPE>::has_denorm;            \
  408.   const bool numeric_limits<__INT_N_TYPE>::has_denorm_loss;                     \
  409.   const bool numeric_limits<__INT_N_TYPE>::is_iec559;                           \
  410.   const bool numeric_limits<__INT_N_TYPE>::is_bounded;                          \
  411.   const bool numeric_limits<__INT_N_TYPE>::is_modulo;                           \
  412.   const bool numeric_limits<__INT_N_TYPE>::traps;                               \
  413.   const bool numeric_limits<__INT_N_TYPE>::tinyness_before;                     \
  414.   const float_round_style numeric_limits<__INT_N_TYPE>::round_style;            \
  415.                                                                         \
  416.   const bool numeric_limits<unsigned __INT_N_TYPE>::is_specialized;             \
  417.   const int  numeric_limits<unsigned __INT_N_TYPE>::digits;                     \
  418.   const int  numeric_limits<unsigned __INT_N_TYPE>::digits10;                   \
  419.   const int  numeric_limits<unsigned __INT_N_TYPE>::max_digits10;               \
  420.   const bool numeric_limits<unsigned __INT_N_TYPE>::is_signed;                  \
  421.   const bool numeric_limits<unsigned __INT_N_TYPE>::is_integer;                 \
  422.   const bool numeric_limits<unsigned __INT_N_TYPE>::is_exact;                   \
  423.   const int  numeric_limits<unsigned __INT_N_TYPE>::radix;                      \
  424.   const int  numeric_limits<unsigned __INT_N_TYPE>::min_exponent;               \
  425.   const int  numeric_limits<unsigned __INT_N_TYPE>::min_exponent10;             \
  426.   const int  numeric_limits<unsigned __INT_N_TYPE>::max_exponent;               \
  427.   const int  numeric_limits<unsigned __INT_N_TYPE>::max_exponent10;             \
  428.   const bool numeric_limits<unsigned __INT_N_TYPE>::has_infinity;               \
  429.   const bool numeric_limits<unsigned __INT_N_TYPE>::has_quiet_NaN;              \
  430.   const bool numeric_limits<unsigned __INT_N_TYPE>::has_signaling_NaN;          \
  431.   const float_denorm_style numeric_limits<unsigned __INT_N_TYPE>::has_denorm;   \
  432.   const bool numeric_limits<unsigned __INT_N_TYPE>::has_denorm_loss;            \
  433.   const bool numeric_limits<unsigned __INT_N_TYPE>::is_iec559;                  \
  434.   const bool numeric_limits<unsigned __INT_N_TYPE>::is_bounded;                 \
  435.   const bool numeric_limits<unsigned __INT_N_TYPE>::is_modulo;                  \
  436.   const bool numeric_limits<unsigned __INT_N_TYPE>::traps;                      \
  437.   const bool numeric_limits<unsigned __INT_N_TYPE>::tinyness_before;            \
  438.   const float_round_style numeric_limits<unsigned __INT_N_TYPE>::round_style;
  439.  
  440. #ifdef __GLIBCXX_TYPE_INT_N_0
  441.   INT_N (__GLIBCXX_TYPE_INT_N_0)
  442. #endif
  443. #ifdef __GLIBCXX_TYPE_INT_N_1
  444.   INT_N (__GLIBCXX_TYPE_INT_N_1)
  445. #endif
  446. #ifdef __GLIBCXX_TYPE_INT_N_2
  447.   INT_N (__GLIBCXX_TYPE_INT_N_2)
  448. #endif
  449. #ifdef __GLIBCXX_TYPE_INT_N_3
  450.   INT_N (__GLIBCXX_TYPE_INT_N_3)
  451. #endif
  452.  
  453.   // float
  454.   const bool numeric_limits<float>::is_specialized;
  455.   const int  numeric_limits<float>::digits;
  456.   const int  numeric_limits<float>::digits10;
  457.   const int  numeric_limits<float>::max_digits10;
  458.   const bool numeric_limits<float>::is_signed;
  459.   const bool numeric_limits<float>::is_integer;
  460.   const bool numeric_limits<float>::is_exact;
  461.   const int  numeric_limits<float>::radix;
  462.   const int  numeric_limits<float>::min_exponent;
  463.   const int  numeric_limits<float>::min_exponent10;
  464.   const int  numeric_limits<float>::max_exponent;
  465.   const int  numeric_limits<float>::max_exponent10;
  466.   const bool numeric_limits<float>::has_infinity;
  467.   const bool numeric_limits<float>::has_quiet_NaN;
  468.   const bool numeric_limits<float>::has_signaling_NaN;
  469.   const float_denorm_style numeric_limits<float>::has_denorm;
  470.   const bool numeric_limits<float>::has_denorm_loss;
  471.   const bool numeric_limits<float>::is_iec559;
  472.   const bool numeric_limits<float>::is_bounded;
  473.   const bool numeric_limits<float>::is_modulo;
  474.   const bool numeric_limits<float>::traps;
  475.   const bool numeric_limits<float>::tinyness_before;
  476.   const float_round_style numeric_limits<float>::round_style;
  477.  
  478.   // double
  479.   const bool numeric_limits<double>::is_specialized;
  480.   const int  numeric_limits<double>::digits;
  481.   const int  numeric_limits<double>::digits10;
  482.   const int  numeric_limits<double>::max_digits10;
  483.   const bool numeric_limits<double>::is_signed;
  484.   const bool numeric_limits<double>::is_integer;
  485.   const bool numeric_limits<double>::is_exact;
  486.   const int  numeric_limits<double>::radix;
  487.   const int  numeric_limits<double>::min_exponent;
  488.   const int  numeric_limits<double>::min_exponent10;
  489.   const int  numeric_limits<double>::max_exponent;
  490.   const int  numeric_limits<double>::max_exponent10;
  491.   const bool numeric_limits<double>::has_infinity;
  492.   const bool numeric_limits<double>::has_quiet_NaN;
  493.   const bool numeric_limits<double>::has_signaling_NaN;
  494.   const float_denorm_style numeric_limits<double>::has_denorm;
  495.   const bool numeric_limits<double>::has_denorm_loss;
  496.   const bool numeric_limits<double>::is_iec559;
  497.   const bool numeric_limits<double>::is_bounded;
  498.   const bool numeric_limits<double>::is_modulo;
  499.   const bool numeric_limits<double>::traps;
  500.   const bool numeric_limits<double>::tinyness_before;
  501.   const float_round_style numeric_limits<double>::round_style;
  502.  
  503.   // long double
  504.   const bool numeric_limits<long double>::is_specialized;
  505.   const int  numeric_limits<long double>::digits;
  506.   const int  numeric_limits<long double>::digits10;
  507.   const int  numeric_limits<long double>::max_digits10;
  508.   const bool numeric_limits<long double>::is_signed;
  509.   const bool numeric_limits<long double>::is_integer;
  510.   const bool numeric_limits<long double>::is_exact;
  511.   const int  numeric_limits<long double>::radix;
  512.   const int  numeric_limits<long double>::min_exponent;
  513.   const int  numeric_limits<long double>::min_exponent10;
  514.   const int  numeric_limits<long double>::max_exponent;
  515.   const int  numeric_limits<long double>::max_exponent10;
  516.   const bool numeric_limits<long double>::has_infinity;
  517.   const bool numeric_limits<long double>::has_quiet_NaN;
  518.   const bool numeric_limits<long double>::has_signaling_NaN;
  519.   const float_denorm_style numeric_limits<long double>::has_denorm;
  520.   const bool numeric_limits<long double>::has_denorm_loss;
  521.   const bool numeric_limits<long double>::is_iec559;
  522.   const bool numeric_limits<long double>::is_bounded;
  523.   const bool numeric_limits<long double>::is_modulo;
  524.   const bool numeric_limits<long double>::traps;
  525.   const bool numeric_limits<long double>::tinyness_before;
  526.   const float_round_style numeric_limits<long double>::round_style;
  527.  
  528.   // char16_t
  529.   const bool numeric_limits<char16_t>::is_specialized;
  530.   const int  numeric_limits<char16_t>::digits;
  531.   const int  numeric_limits<char16_t>::digits10;
  532.   const int  numeric_limits<char16_t>::max_digits10;
  533.   const bool numeric_limits<char16_t>::is_signed;
  534.   const bool numeric_limits<char16_t>::is_integer;
  535.   const bool numeric_limits<char16_t>::is_exact;
  536.   const int  numeric_limits<char16_t>::radix;
  537.   const int  numeric_limits<char16_t>::min_exponent;
  538.   const int  numeric_limits<char16_t>::min_exponent10;
  539.   const int  numeric_limits<char16_t>::max_exponent;
  540.   const int  numeric_limits<char16_t>::max_exponent10;
  541.   const bool numeric_limits<char16_t>::has_infinity;
  542.   const bool numeric_limits<char16_t>::has_quiet_NaN;
  543.   const bool numeric_limits<char16_t>::has_signaling_NaN;
  544.   const float_denorm_style numeric_limits<char16_t>::has_denorm;
  545.   const bool numeric_limits<char16_t>::has_denorm_loss;
  546.   const bool numeric_limits<char16_t>::is_iec559;
  547.   const bool numeric_limits<char16_t>::is_bounded;
  548.   const bool numeric_limits<char16_t>::is_modulo;
  549.   const bool numeric_limits<char16_t>::traps;
  550.   const bool numeric_limits<char16_t>::tinyness_before;
  551.   const float_round_style numeric_limits<char16_t>::round_style;
  552.  
  553.   // char32_t
  554.   const bool numeric_limits<char32_t>::is_specialized;
  555.   const int  numeric_limits<char32_t>::digits;
  556.   const int  numeric_limits<char32_t>::digits10;
  557.   const int  numeric_limits<char32_t>::max_digits10;
  558.   const bool numeric_limits<char32_t>::is_signed;
  559.   const bool numeric_limits<char32_t>::is_integer;
  560.   const bool numeric_limits<char32_t>::is_exact;
  561.   const int  numeric_limits<char32_t>::radix;
  562.   const int  numeric_limits<char32_t>::min_exponent;
  563.   const int  numeric_limits<char32_t>::min_exponent10;
  564.   const int  numeric_limits<char32_t>::max_exponent;
  565.   const int  numeric_limits<char32_t>::max_exponent10;
  566.   const bool numeric_limits<char32_t>::has_infinity;
  567.   const bool numeric_limits<char32_t>::has_quiet_NaN;
  568.   const bool numeric_limits<char32_t>::has_signaling_NaN;
  569.   const float_denorm_style numeric_limits<char32_t>::has_denorm;
  570.   const bool numeric_limits<char32_t>::has_denorm_loss;
  571.   const bool numeric_limits<char32_t>::is_iec559;
  572.   const bool numeric_limits<char32_t>::is_bounded;
  573.   const bool numeric_limits<char32_t>::is_modulo;
  574.   const bool numeric_limits<char32_t>::traps;
  575.   const bool numeric_limits<char32_t>::tinyness_before;
  576.   const float_round_style numeric_limits<char32_t>::round_style;
  577.  
  578. #undef const
  579.  
  580. _GLIBCXX_END_NAMESPACE_VERSION
  581. } // namespace
  582.  
  583. // XXX GLIBCXX_ABI Deprecated
  584. #ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
  585.  
  586. #define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \
  587.   extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \
  588.   __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E")))
  589. _GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14);
  590. _GLIBCXX_NUM_LIM_COMPAT (int, digits, 6);
  591. _GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8);
  592. _GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9);
  593. _GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10);
  594. _GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8);
  595. _GLIBCXX_NUM_LIM_COMPAT (int, radix, 5);
  596. _GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12);
  597. _GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14);
  598. _GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12);
  599. _GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14);
  600. _GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12);
  601. _GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13);
  602. _GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17);
  603. _GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10);
  604. _GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15);
  605. _GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9);
  606. _GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10);
  607. _GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9);
  608. _GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5);
  609. _GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15);
  610. _GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11);
  611.  
  612. #endif // _GLIBCXX_LONG_DOUBLE_COMPAT
  613.