From ee620c0dc32fef05144d97efaa876db5f0b8d632 Mon Sep 17 00:00:00 2001 From: paolo Date: Fri, 13 Apr 2007 10:54:37 +0000 Subject: [PATCH] 2007-04-13 Paolo Carlini * include/ext/numeric_traits.h: Do not include . (__numeric_traits_integer::__is_signed, __digits): Add. (__numeric_traits_floating::__digits10, __max_exponent10): Add. * src/istream.cc (ignore(streamsize, int_type), operator>> (basic_istream&, char*), ignore(streamsize, int_type)): Use the latter. * src/compatibility.cc (ignore(streamsize), ignore(streamsize)): Likewise. * include/ext/vstring_util.h (__vstring_utility<>::_S_compare): Likewise. * include/bits/stl_memory.h (__get_temporary_buffer): Likewise. * include/bits/stl_algobase.h (lexicographical_compare(const char*, const char*, const char*, const char*)): Likewise. * include/bits/locale_facets.tcc (num_get<>::_M_extract_int(_InIter, _InIter, ios_base&, ios_base::iostate&, _ValueT&), num_put<>::_M_insert_int(_OutIter, ios_base&, _CharT, _ValueT), num_put<>::_M_insert_float(_OutIter, ios_base&, _CharT, char, _ValueT), collate<>::do_hash(const _CharT*, const _CharT*)): Likewise. * include/bits/basic_string.h (basic_string<>::_S_compare): Likewise. * include/bits/istream.tcc (operator>>(short&), operator>>(int&), ignore(streamsize), ignore(streamsize, int_type), operator>> (basic_istream<>&, _CharT*)): Likewise. * include/bits/stl_bvector.h (vector::max_size): Likewise. * include/tr1/functional_hash.h (struct hash): Likewise. * include/std/istream: Do not include . * include/tr1/cmath: Include . * testsuite/23_containers/vector/bool/capacity/29134.cc: Likewise. * testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc: Likewise. * testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc: Likewise. * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc: Likewise. * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc: Likewise. * testsuite/27_io/ios_base/storage/2.cc: Likewise. * include/tr1/hashtable: Do not include the whole . git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123779 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 41 +++++++++++++++++ libstdc++-v3/include/bits/basic_string.h | 10 ++-- libstdc++-v3/include/bits/istream.tcc | 27 ++++++----- libstdc++-v3/include/bits/locale_facets.tcc | 26 +++++++---- libstdc++-v3/include/bits/stl_algobase.h | 4 +- libstdc++-v3/include/bits/stl_bvector.h | 3 +- libstdc++-v3/include/bits/stl_memory.h | 4 +- libstdc++-v3/include/ext/numeric_traits.h | 53 +++++++++++++++++++--- libstdc++-v3/include/ext/vstring_util.h | 10 ++-- libstdc++-v3/include/std/istream | 1 - libstdc++-v3/include/tr1/cmath | 1 + libstdc++-v3/include/tr1/functional_hash.h | 5 +- libstdc++-v3/include/tr1/hashtable | 3 +- libstdc++-v3/src/compatibility.cc | 15 +++--- libstdc++-v3/src/istream.cc | 22 +++++---- .../23_containers/vector/bool/capacity/29134.cc | 1 + .../basic_istream/extractors_arithmetic/char/12.cc | 4 +- .../basic_istream/extractors_arithmetic/char/13.cc | 4 +- .../extractors_arithmetic/wchar_t/12.cc | 3 +- .../extractors_arithmetic/wchar_t/13.cc | 3 +- libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc | 4 +- 21 files changed, 175 insertions(+), 69 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 69cf154..1c78c2e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,44 @@ +2007-04-13 Paolo Carlini + + * include/ext/numeric_traits.h: Do not include . + (__numeric_traits_integer::__is_signed, __digits): Add. + (__numeric_traits_floating::__digits10, __max_exponent10): Add. + * src/istream.cc (ignore(streamsize, int_type), operator>> + (basic_istream&, char*), ignore(streamsize, + int_type)): Use the latter. + * src/compatibility.cc (ignore(streamsize), + ignore(streamsize)): Likewise. + * include/ext/vstring_util.h (__vstring_utility<>::_S_compare): + Likewise. + * include/bits/stl_memory.h (__get_temporary_buffer): Likewise. + * include/bits/stl_algobase.h (lexicographical_compare(const char*, + const char*, const char*, const char*)): Likewise. + * include/bits/locale_facets.tcc (num_get<>::_M_extract_int(_InIter, + _InIter, ios_base&, ios_base::iostate&, _ValueT&), + num_put<>::_M_insert_int(_OutIter, ios_base&, _CharT, _ValueT), + num_put<>::_M_insert_float(_OutIter, ios_base&, _CharT, char, + _ValueT), collate<>::do_hash(const _CharT*, const _CharT*)): Likewise. + * include/bits/basic_string.h (basic_string<>::_S_compare): Likewise. + * include/bits/istream.tcc (operator>>(short&), operator>>(int&), + ignore(streamsize), ignore(streamsize, int_type), operator>> + (basic_istream<>&, _CharT*)): Likewise. + * include/bits/stl_bvector.h (vector::max_size): Likewise. + * include/tr1/functional_hash.h (struct hash): Likewise. + * include/std/istream: Do not include . + * include/tr1/cmath: Include . + * testsuite/23_containers/vector/bool/capacity/29134.cc: Likewise. + * testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc: + Likewise. + * testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc: + Likewise. + * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc: + Likewise. + * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc: + Likewise. + * testsuite/27_io/ios_base/storage/2.cc: Likewise. + + * include/tr1/hashtable: Do not include the whole . + 2007-04-11 Paolo Carlini * config/locale/gnu/c_locale.h: Do not include diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index a42e290..a6e3d6d 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -395,12 +395,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { const difference_type __d = difference_type(__n1 - __n2); - if (__d > numeric_limits::max()) - return numeric_limits::max(); - else if (__d < numeric_limits::min()) - return numeric_limits::min(); + if (__d > __gnu_cxx::__numeric_traits::__max) + return __gnu_cxx::__numeric_traits::__max; + else if (__d < __gnu_cxx::__numeric_traits::__min) + return __gnu_cxx::__numeric_traits::__min; else - return int(__d); + return int(__d); } void diff --git a/libstdc++-v3/include/bits/istream.tcc b/libstdc++-v3/include/bits/istream.tcc index 1ef3253..4588b9c 100644 --- a/libstdc++-v3/include/bits/istream.tcc +++ b/libstdc++-v3/include/bits/istream.tcc @@ -117,8 +117,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _M_extract(__l); if (!this->fail()) { - if (numeric_limits::min() <= __l - && __l <= numeric_limits::max()) + if (__gnu_cxx::__numeric_traits::__min <= __l + && __l <= __gnu_cxx::__numeric_traits::__max) __n = short(__l); else this->setstate(ios_base::failbit); @@ -137,8 +137,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _M_extract(__l); if (!this->fail()) { - if (numeric_limits::min() <= __l - && __l <= numeric_limits::max()) + if (__gnu_cxx::__numeric_traits::__min <= __l + && __l <= __gnu_cxx::__numeric_traits::__max) __n = int(__l); else this->setstate(ios_base::failbit); @@ -432,10 +432,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ++_M_gcount; __c = __sb->snextc(); } - if (__n == numeric_limits::max() + if (__n == __gnu_cxx::__numeric_traits::__max && !traits_type::eq_int_type(__c, __eof)) { - _M_gcount = numeric_limits::min(); + _M_gcount = + __gnu_cxx::__numeric_traits::__min; __large_ignore = true; } else @@ -443,7 +444,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits::max(); + _M_gcount = __gnu_cxx::__numeric_traits::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; @@ -483,11 +484,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ++_M_gcount; __c = __sb->snextc(); } - if (__n == numeric_limits::max() + if (__n == __gnu_cxx::__numeric_traits::__max && !traits_type::eq_int_type(__c, __eof) && !traits_type::eq_int_type(__c, __delim)) { - _M_gcount = numeric_limits::min(); + _M_gcount = + __gnu_cxx::__numeric_traits::__min; __large_ignore = true; } else @@ -495,13 +497,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits::max(); + _M_gcount = __gnu_cxx::__numeric_traits::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; else if (traits_type::eq_int_type(__c, __delim)) { - if (_M_gcount < numeric_limits::max()) + if (_M_gcount + < __gnu_cxx::__numeric_traits::__max) ++_M_gcount; __sb->sbumpc(); } @@ -800,7 +803,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Figure out how many characters to extract. streamsize __num = __in.width(); if (__num <= 0) - __num = numeric_limits::max(); + __num = __gnu_cxx::__numeric_traits::__max; const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index 64f1485..42cf1b0 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -39,7 +39,7 @@ #pragma GCC system_header -#include // For numeric_limits +#include #include // For bad_cast. #include #include @@ -538,7 +538,7 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE if (!__testeof) { __c = *__beg; - if (numeric_limits<_ValueT>::is_signed) + if (__gnu_cxx::__numeric_traits<_ValueT>::__is_signed) __negative = __c == __lit[__num_base::_S_iminus]; if ((__negative || __c == __lit[__num_base::_S_iplus]) && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) @@ -607,8 +607,9 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE if (__lc->_M_use_grouping) __found_grouping.reserve(32); bool __testfail = false; - const __unsigned_type __max = __negative ? - -numeric_limits<_ValueT>::min() : numeric_limits<_ValueT>::max(); + const __unsigned_type __max = __negative + ? -__gnu_cxx::__numeric_traits<_ValueT>::__min + : __gnu_cxx::__numeric_traits<_ValueT>::__max; const __unsigned_type __smax = __max / __base; __unsigned_type __result = 0; int __digit = 0; @@ -1029,7 +1030,7 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE if (__v > 0) { if (__flags & ios_base::showpos - && numeric_limits<_ValueT>::is_signed) + && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) *--__cs = __lit[__num_base::_S_oplus], ++__len; } else if (__v) @@ -1116,7 +1117,8 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE // Use default precision if out of range. const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision(); - const int __max_digits = numeric_limits<_ValueT>::digits10; + const int __max_digits = + __gnu_cxx::__numeric_traits<_ValueT>::__digits10; // [22.2.2.2.2] Stage 1, numeric conversion to character. int __len; @@ -1143,7 +1145,8 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE #else // Consider the possibility of long ios_base::fixed outputs const bool __fixed = __io.flags() & ios_base::fixed; - const int __max_exp = numeric_limits<_ValueT>::max_exponent10; + const int __max_exp = + __gnu_cxx::__numeric_traits<_ValueT>::__max_exponent10; // The size of the output string is computed as follows. // ios_base::fixed outputs may need up to __max_exp + 1 chars @@ -1790,7 +1793,8 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE } #else // max_exponent10 + 1 for the integer part, + 2 for sign and '\0'. - const int __cs_size = numeric_limits::max_exponent10 + 3; + const int __cs_size = + __gnu_cxx::__numeric_traits::__max_exponent10 + 3; char* __cs = static_cast(__builtin_alloca(__cs_size)); int __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, "%.*Lf", 0, __units); @@ -2499,8 +2503,10 @@ _GLIBCXX_END_LDBL_NAMESPACE { unsigned long __val = 0; for (; __lo < __hi; ++__lo) - __val = *__lo + ((__val << 7) | - (__val >> (numeric_limits::digits - 7))); + __val = + *__lo + ((__val << 7) + | (__val >> (__gnu_cxx::__numeric_traits:: + __digits - 7))); return static_cast(__val); } diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 0c4c01d..86fec00 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -70,7 +70,7 @@ #include #include #include -#include +#include #include #include #include @@ -1018,7 +1018,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __glibcxx_requires_valid_range(__first1, __last1); __glibcxx_requires_valid_range(__first2, __last2); - if (std::numeric_limits::is_signed) + if (__gnu_cxx::__numeric_traits::__is_signed) return std::lexicographical_compare((const signed char*) __first1, (const signed char*) __last1, (const signed char*) __first2, diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index d9863e0..ba29650 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -583,7 +583,8 @@ template max_size() const { const size_type __isize = - std::numeric_limits::max() - int(_S_word_bit) + 1; + __gnu_cxx::__numeric_traits::__max + - int(_S_word_bit) + 1; const size_type __asize = _M_get_Bit_allocator().max_size(); return (__asize <= __isize / int(_S_word_bit) ? __asize * int(_S_word_bit) : __isize); diff --git a/libstdc++-v3/include/bits/stl_memory.h b/libstdc++-v3/include/bits/stl_memory.h index 1018ae0..7dbd323 100644 --- a/libstdc++-v3/include/bits/stl_memory.h +++ b/libstdc++-v3/include/bits/stl_memory.h @@ -41,7 +41,6 @@ #include #include #include -#include _GLIBCXX_BEGIN_NAMESPACE(std) @@ -57,7 +56,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) pair<_Tp*, ptrdiff_t> __get_temporary_buffer(ptrdiff_t __len, _Tp*) { - const ptrdiff_t __max = numeric_limits::max() / sizeof(_Tp); + const ptrdiff_t __max = + __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); if (__len > __max) __len = __max; diff --git a/libstdc++-v3/include/ext/numeric_traits.h b/libstdc++-v3/include/ext/numeric_traits.h index cff5b70..109e37e 100644 --- a/libstdc++-v3/include/ext/numeric_traits.h +++ b/libstdc++-v3/include/ext/numeric_traits.h @@ -37,7 +37,6 @@ #pragma GCC system_header -#include #include #include @@ -62,6 +61,11 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) // Only integers for initialization of member constant. static const _Value __min = __glibcxx_min(_Value); static const _Value __max = __glibcxx_max(_Value); + + // NB: these two also available in std::numeric_limits as compile + // time constants, but is big and we avoid including it. + static const bool __is_signed = __glibcxx_signed(_Value); + static const int __digits = __glibcxx_digits(_Value); }; template @@ -71,17 +75,52 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) const _Value __numeric_traits_integer<_Value>::__max; template + const bool __numeric_traits_integer<_Value>::__is_signed; + + template + const int __numeric_traits_integer<_Value>::__digits; + +#undef __glibcxx_signed +#undef __glibcxx_digits +#undef __glibcxx_min +#undef __glibcxx_max + +#define __glibcxx_floating(_Tp, _Fval, _Dval, _LDval) \ + (std::__are_same<_Tp, float>::__value ? _Fval \ + : std::__are_same<_Tp, double>::__value ? _Dval : _LDval) + +#define __glibcxx_max_digits10(_Tp) \ + (2 + __glibcxx_floating(_Tp, __FLT_MANT_DIG__, __DBL_MANT_DIG__, \ + __LDBL_MANT_DIG__) * 3010 / 10000) + +#define __glibcxx_digits10(_Tp) \ + __glibcxx_floating(_Tp, __FLT_DIG__, __DBL_DIG__, __LDBL_DIG__) + +#define __glibcxx_max_exponent10(_Tp) \ + __glibcxx_floating(_Tp, __FLT_MAX_10_EXP__, __DBL_MAX_10_EXP__, \ + __LDBL_MAX_10_EXP__) + + template struct __numeric_traits_floating { // Only floating point types. See N1822. - static const int __max_digits10 = - 2 + std::numeric_limits<_Value>::digits * 3010/10000; + static const int __max_digits10 = __glibcxx_max_digits10(_Value); + + // See above comment... + static const int __digits10 = __glibcxx_digits10(_Value); + static const int __max_exponent10 = __glibcxx_max_exponent10(_Value); }; template const int __numeric_traits_floating<_Value>::__max_digits10; template + const int __numeric_traits_floating<_Value>::__digits10; + + template + const int __numeric_traits_floating<_Value>::__max_exponent10; + + template struct __numeric_traits : public __conditional_type::__value, __numeric_traits_integer<_Value>, @@ -90,9 +129,9 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) _GLIBCXX_END_NAMESPACE -#undef __glibcxx_signed -#undef __glibcxx_min -#undef __glibcxx_max -#undef __glibcxx_digits +#undef __glibcxx_floating +#undef __glibcxx_max_digits10 +#undef __glibcxx_digits10 +#undef __glibcxx_max_exponent10 #endif diff --git a/libstdc++-v3/include/ext/vstring_util.h b/libstdc++-v3/include/ext/vstring_util.h index bd50d7f..390ef37 100644 --- a/libstdc++-v3/include/ext/vstring_util.h +++ b/libstdc++-v3/include/ext/vstring_util.h @@ -165,12 +165,12 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) { const difference_type __d = difference_type(__n1 - __n2); - if (__d > std::numeric_limits::max()) - return std::numeric_limits::max(); - else if (__d < std::numeric_limits::min()) - return std::numeric_limits::min(); + if (__d > __numeric_traits_integer::__max) + return __numeric_traits_integer::__max; + else if (__d < __numeric_traits_integer::__min) + return __numeric_traits_integer::__min; else - return int(__d); + return int(__d); } }; diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream index 2aa0d1c..9cd2549 100644 --- a/libstdc++-v3/include/std/istream +++ b/libstdc++-v3/include/std/istream @@ -45,7 +45,6 @@ #include #include #include -#include // For numeric_limits _GLIBCXX_BEGIN_NAMESPACE(std) diff --git a/libstdc++-v3/include/tr1/cmath b/libstdc++-v3/include/tr1/cmath index 8d23144..36845bb 100644 --- a/libstdc++-v3/include/tr1/cmath +++ b/libstdc++-v3/include/tr1/cmath @@ -36,6 +36,7 @@ #include #include +#include #include #include diff --git a/libstdc++-v3/include/tr1/functional_hash.h b/libstdc++-v3/include/tr1/functional_hash.h index 9c6f69a..f692308 100644 --- a/libstdc++-v3/include/tr1/functional_hash.h +++ b/libstdc++-v3/include/tr1/functional_hash.h @@ -208,7 +208,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) __ldval = __ldval < 0.0l ? -(__ldval + 0.5l) : __ldval; const long double __mult = - std::numeric_limits::max() + 1.0l; + __gnu_cxx::__numeric_traits::__max + 1.0l; __ldval *= __mult; // Try to use all the bits of the mantissa (really necessary only @@ -217,8 +217,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) __ldval = (__ldval - (long double)__hibits) * __mult; const std::size_t __coeff = - (std::numeric_limits::max() - / std::numeric_limits::max_exponent); + __gnu_cxx::__numeric_traits::__max / __LDBL_MAX_EXP__; __result = __hibits + (std::size_t)__ldval + __coeff * __exponent; diff --git a/libstdc++-v3/include/tr1/hashtable b/libstdc++-v3/include/tr1/hashtable index 7fa9ea1..526ebf8 100644 --- a/libstdc++-v3/include/tr1/hashtable +++ b/libstdc++-v3/include/tr1/hashtable @@ -53,9 +53,10 @@ #define _TR1_HASHTABLE 1 #include // For std::pair -#include #include #include +#include +#include #include #include #include // For true_type and false_type diff --git a/libstdc++-v3/src/compatibility.cc b/libstdc++-v3/src/compatibility.cc index f88fbc7..83b20b9 100644 --- a/libstdc++-v3/src/compatibility.cc +++ b/libstdc++-v3/src/compatibility.cc @@ -51,6 +51,7 @@ #include #include #include +#include _GLIBCXX_BEGIN_NAMESPACE(std) @@ -96,10 +97,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __c = __sb->snextc(); } } - if (__n == numeric_limits::max() + if (__n == __gnu_cxx::__numeric_traits::__max && !traits_type::eq_int_type(__c, __eof)) { - _M_gcount = numeric_limits::min(); + _M_gcount = + __gnu_cxx::__numeric_traits::__min; __large_ignore = true; } else @@ -107,7 +109,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits::max(); + _M_gcount = __gnu_cxx::__numeric_traits::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; @@ -161,10 +163,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __c = __sb->snextc(); } } - if (__n == numeric_limits::max() + if (__n == __gnu_cxx::__numeric_traits::__max && !traits_type::eq_int_type(__c, __eof)) { - _M_gcount = numeric_limits::min(); + _M_gcount = + __gnu_cxx::__numeric_traits::__min; __large_ignore = true; } else @@ -172,7 +175,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits::max(); + _M_gcount = __gnu_cxx::__numeric_traits::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; diff --git a/libstdc++-v3/src/istream.cc b/libstdc++-v3/src/istream.cc index 688ad16..0f24340 100644 --- a/libstdc++-v3/src/istream.cc +++ b/libstdc++-v3/src/istream.cc @@ -152,11 +152,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __c = __sb->snextc(); } } - if (__n == numeric_limits::max() + if (__n == __gnu_cxx::__numeric_traits::__max && !traits_type::eq_int_type(__c, __eof) && !traits_type::eq_int_type(__c, __delim)) { - _M_gcount = numeric_limits::min(); + _M_gcount = + __gnu_cxx::__numeric_traits::__min; __large_ignore = true; } else @@ -164,13 +165,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits::max(); + _M_gcount = __gnu_cxx::__numeric_traits::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; else if (traits_type::eq_int_type(__c, __delim)) { - if (_M_gcount < numeric_limits::max()) + if (_M_gcount + < __gnu_cxx::__numeric_traits::__max) ++_M_gcount; __sb->sbumpc(); } @@ -204,7 +206,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Figure out how many characters to extract. streamsize __num = __in.width(); if (__num <= 0) - __num = numeric_limits::max(); + __num = __gnu_cxx::__numeric_traits::__max; const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); @@ -532,11 +534,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __c = __sb->snextc(); } } - if (__n == numeric_limits::max() + if (__n == __gnu_cxx::__numeric_traits::__max && !traits_type::eq_int_type(__c, __eof) && !traits_type::eq_int_type(__c, __delim)) { - _M_gcount = numeric_limits::min(); + _M_gcount = + __gnu_cxx::__numeric_traits::__min; __large_ignore = true; } else @@ -544,13 +547,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits::max(); + _M_gcount = __gnu_cxx::__numeric_traits::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; else if (traits_type::eq_int_type(__c, __delim)) { - if (_M_gcount < numeric_limits::max()) + if (_M_gcount + < __gnu_cxx::__numeric_traits::__max) ++_M_gcount; __sb->sbumpc(); } diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc index 69e5a53..7ebec61 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc @@ -19,6 +19,7 @@ // 23.2.5 class vector [lib.vector.bool] #include +#include #include // libstdc++/29134 diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc index e5ef640..a727151 100644 --- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc +++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc @@ -1,6 +1,7 @@ // 1999-04-12 bkoz -// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -27,6 +28,7 @@ #include #include +#include #include // libstdc++/3720 diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc index fbda4a4..ab01a77 100644 --- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc +++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc @@ -1,6 +1,7 @@ // 1999-04-12 bkoz -// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -23,6 +24,7 @@ #include #include #include +#include #include // libstdc++/3720 part two diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc index 2b8764c..afe929d 100644 --- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc +++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2004 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -25,6 +25,7 @@ #include #include +#include #include // libstdc++/3720 diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc index 301431f..57c3173 100644 --- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc +++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2004 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -21,6 +21,7 @@ #include #include #include +#include #include // libstdc++/3720 part two diff --git a/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc b/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc index 2272a46..4d25087 100644 --- a/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc +++ b/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc @@ -1,6 +1,7 @@ // 2000-12-19 bkoz -// Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation +// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,6 +33,7 @@ #include #include +#include #include // libstdc++/3129 -- 2.7.4