From 31bfa1777685abd42c74331ec279e3c5e7bb68ac Mon Sep 17 00:00:00 2001 From: Phil Edwards Date: Fri, 20 Jul 2001 00:09:31 +0000 Subject: [PATCH] backport: basic_string.h: Qualify symbols with 'template'. 2001-07-19 Phil Edwards Mark Mitchell Merge from cp-parser-branch. * include/bits/basic_string.h: Qualify symbols with 'template'. * include/bits/basic_string.tcc: Likewise. * include/bits/fstream.tcc: Likewise. * include/bits/istream.tcc: Likewise. * include/bits/sstream.tcc: Likewise. * include/bits/std_istream.h: Likewise. * include/bits/stl_iterator.h: Likewise. * include/bits/streambuf.tcc: Likewise. * src/gen-num-limits.cc: Add 'template<>' to specializations. * src/locale.cc: Likewise. Co-Authored-By: Mark Mitchell From-SVN: r44167 --- libstdc++-v3/ChangeLog | 15 +++++++++ libstdc++-v3/include/bits/basic_string.h | 2 +- libstdc++-v3/include/bits/basic_string.tcc | 24 +++++++------- libstdc++-v3/include/bits/fstream.tcc | 18 +++++------ libstdc++-v3/include/bits/istream.tcc | 4 +-- libstdc++-v3/include/bits/sstream.tcc | 8 ++--- libstdc++-v3/include/bits/std_istream.h | 2 +- libstdc++-v3/include/bits/stl_iterator.h | 2 +- libstdc++-v3/include/bits/streambuf.tcc | 8 ++--- libstdc++-v3/src/gen-num-limits.cc | 37 ++++++++++++++++------ libstdc++-v3/src/locale.cc | 22 +++++++++++-- 11 files changed, 97 insertions(+), 45 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 179e073ed78..761abcff8a3 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,18 @@ +2001-07-19 Phil Edwards + Mark Mitchell + + Merge from cp-parser-branch. + * include/bits/basic_string.h: Qualify symbols with 'template'. + * include/bits/basic_string.tcc: Likewise. + * include/bits/fstream.tcc: Likewise. + * include/bits/istream.tcc: Likewise. + * include/bits/sstream.tcc: Likewise. + * include/bits/std_istream.h: Likewise. + * include/bits/stl_iterator.h: Likewise. + * include/bits/streambuf.tcc: Likewise. + * src/gen-num-limits.cc: Add 'template<>' to specializations. + * src/locale.cc: Likewise. + 2001-07-19 Gabriel Dos Reis Bert De Knuydt diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index ef08da102f5..dc62a542e5e 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -118,7 +118,7 @@ namespace std struct _Rep { // Types: - typedef typename _Alloc::rebind::other _Raw_bytes_alloc; + typedef typename _Alloc::template rebind::other _Raw_bytes_alloc; // (Public) Data members: diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc index 9a05d2c8ac7..faa88a2e693 100644 --- a/libstdc++-v3/include/bits/basic_string.tcc +++ b/libstdc++-v3/include/bits/basic_string.tcc @@ -354,7 +354,7 @@ namespace std #endif template - basic_string<_CharT, _Traits, _Alloc>::_Rep* + typename basic_string<_CharT, _Traits, _Alloc>::_Rep* basic_string<_CharT, _Traits, _Alloc>::_Rep:: _S_create(size_t __capacity, const _Alloc& __alloc) { @@ -571,7 +571,7 @@ namespace std } template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: copy(_CharT* __s, size_type __n, size_type __pos) const { @@ -587,7 +587,7 @@ namespace std } template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: find(const _CharT* __s, size_type __pos, size_type __n) const { @@ -601,7 +601,7 @@ namespace std } template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: find(_CharT __c, size_type __pos) const { @@ -620,7 +620,7 @@ namespace std template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: rfind(const _CharT* __s, size_type __pos, size_type __n) const { @@ -640,7 +640,7 @@ namespace std } template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: rfind(_CharT __c, size_type __pos) const { @@ -659,7 +659,7 @@ namespace std } template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: find_first_of(const _CharT* __s, size_type __pos, size_type __n) const { @@ -673,7 +673,7 @@ namespace std } template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: find_last_of(const _CharT* __s, size_type __pos, size_type __n) const { @@ -693,7 +693,7 @@ namespace std } template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const { @@ -705,7 +705,7 @@ namespace std } template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: find_first_not_of(_CharT __c, size_type __pos) const { @@ -717,7 +717,7 @@ namespace std } template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const { @@ -737,7 +737,7 @@ namespace std } template - basic_string<_CharT, _Traits, _Alloc>::size_type + typename basic_string<_CharT, _Traits, _Alloc>::size_type basic_string<_CharT, _Traits, _Alloc>:: find_last_not_of(_CharT __c, size_type __pos) const { diff --git a/libstdc++-v3/include/bits/fstream.tcc b/libstdc++-v3/include/bits/fstream.tcc index 7a41ba789f6..54c70463d64 100644 --- a/libstdc++-v3/include/bits/fstream.tcc +++ b/libstdc++-v3/include/bits/fstream.tcc @@ -139,7 +139,7 @@ namespace std } template - basic_filebuf<_CharT, _Traits>::__filebuf_type* + typename basic_filebuf<_CharT, _Traits>::__filebuf_type* basic_filebuf<_CharT, _Traits>:: open(const char* __s, ios_base::openmode __mode) { @@ -166,7 +166,7 @@ namespace std } template - basic_filebuf<_CharT, _Traits>::__filebuf_type* + typename basic_filebuf<_CharT, _Traits>::__filebuf_type* basic_filebuf<_CharT, _Traits>:: close() { @@ -232,7 +232,7 @@ namespace std } template - basic_filebuf<_CharT, _Traits>::int_type + typename basic_filebuf<_CharT, _Traits>::int_type basic_filebuf<_CharT, _Traits>:: underflow() { @@ -303,7 +303,7 @@ namespace std } template - basic_filebuf<_CharT, _Traits>::int_type + typename basic_filebuf<_CharT, _Traits>::int_type basic_filebuf<_CharT, _Traits>:: pbackfail(int_type __i) { @@ -371,7 +371,7 @@ namespace std } template - basic_filebuf<_CharT, _Traits>::int_type + typename basic_filebuf<_CharT, _Traits>::int_type basic_filebuf<_CharT, _Traits>:: overflow(int_type __c) { @@ -396,7 +396,7 @@ namespace std } template - basic_filebuf<_CharT, _Traits>::int_type + typename basic_filebuf<_CharT, _Traits>::int_type basic_filebuf<_CharT, _Traits>:: _M_really_overflow(int_type __c) { @@ -475,7 +475,7 @@ namespace std } template - basic_filebuf<_CharT, _Traits>::__streambuf_type* + typename basic_filebuf<_CharT, _Traits>::__streambuf_type* basic_filebuf<_CharT, _Traits>:: setbuf(char_type* __s, streamsize __n) { @@ -503,7 +503,7 @@ namespace std } template - basic_filebuf<_CharT, _Traits>::pos_type + typename basic_filebuf<_CharT, _Traits>::pos_type basic_filebuf<_CharT, _Traits>:: seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode) { @@ -559,7 +559,7 @@ namespace std } template - basic_filebuf<_CharT, _Traits>::pos_type + typename basic_filebuf<_CharT, _Traits>::pos_type basic_filebuf<_CharT, _Traits>:: seekpos(pos_type __pos, ios_base::openmode __mode) { diff --git a/libstdc++-v3/include/bits/istream.tcc b/libstdc++-v3/include/bits/istream.tcc index 3d942b2feb6..a2df71f9440 100644 --- a/libstdc++-v3/include/bits/istream.tcc +++ b/libstdc++-v3/include/bits/istream.tcc @@ -465,7 +465,7 @@ namespace std } template - basic_istream<_CharT, _Traits>::int_type + typename basic_istream<_CharT, _Traits>::int_type basic_istream<_CharT, _Traits>:: get(void) { @@ -720,7 +720,7 @@ namespace std } template - basic_istream<_CharT, _Traits>::int_type + typename basic_istream<_CharT, _Traits>::int_type basic_istream<_CharT, _Traits>:: peek(void) { diff --git a/libstdc++-v3/include/bits/sstream.tcc b/libstdc++-v3/include/bits/sstream.tcc index b2c5703f8b4..2a03ff0de58 100644 --- a/libstdc++-v3/include/bits/sstream.tcc +++ b/libstdc++-v3/include/bits/sstream.tcc @@ -40,7 +40,7 @@ namespace std { template - basic_stringbuf<_CharT, _Traits, _Alloc>::int_type + typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type basic_stringbuf<_CharT, _Traits, _Alloc>:: pbackfail(int_type __c) { @@ -74,7 +74,7 @@ namespace std } template - basic_stringbuf<_CharT, _Traits, _Alloc>::int_type + typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type basic_stringbuf<_CharT, _Traits, _Alloc>:: overflow(int_type __c) { @@ -114,7 +114,7 @@ namespace std } template - basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type + typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type basic_stringbuf<_CharT, _Traits, _Alloc>:: seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode) { @@ -172,7 +172,7 @@ namespace std } template - basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type + typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type basic_stringbuf<_CharT, _Traits, _Alloc>:: seekpos(pos_type __sp, ios_base::openmode __mode) { diff --git a/libstdc++-v3/include/bits/std_istream.h b/libstdc++-v3/include/bits/std_istream.h index ad8d25edb51..c4e6a9f9b3e 100644 --- a/libstdc++-v3/include/bits/std_istream.h +++ b/libstdc++-v3/include/bits/std_istream.h @@ -217,7 +217,7 @@ namespace std typedef _Traits traits_type; typedef basic_streambuf<_CharT, _Traits> __streambuf_type; typedef basic_istream<_CharT, _Traits> __istream_type; - typedef __istream_type::__ctype_type __ctype_type; + typedef typename __istream_type::__ctype_type __ctype_type; typedef typename _Traits::int_type __int_type; explicit diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h index 7e7be72c418..a68613babd9 100644 --- a/libstdc++-v3/include/bits/stl_iterator.h +++ b/libstdc++-v3/include/bits/stl_iterator.h @@ -442,7 +442,7 @@ namespace std template inline __normal_iterator<_Iterator, _Container> - operator+(__normal_iterator<_Iterator, _Container>::difference_type __n, + operator+(typename __normal_iterator<_Iterator, _Container>::difference_type __n, const __normal_iterator<_Iterator, _Container>& __i) { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); } } // namespace std diff --git a/libstdc++-v3/include/bits/streambuf.tcc b/libstdc++-v3/include/bits/streambuf.tcc index a21ad1cb9d7..d928379918a 100644 --- a/libstdc++-v3/include/bits/streambuf.tcc +++ b/libstdc++-v3/include/bits/streambuf.tcc @@ -37,7 +37,7 @@ namespace std { template - basic_streambuf<_CharT, _Traits>::int_type + typename basic_streambuf<_CharT, _Traits>::int_type basic_streambuf<_CharT, _Traits>:: sbumpc() { @@ -54,7 +54,7 @@ namespace std { } template - basic_streambuf<_CharT, _Traits>::int_type + typename basic_streambuf<_CharT, _Traits>::int_type basic_streambuf<_CharT, _Traits>:: sputbackc(char_type __c) { @@ -72,7 +72,7 @@ namespace std { } template - basic_streambuf<_CharT, _Traits>::int_type + typename basic_streambuf<_CharT, _Traits>::int_type basic_streambuf<_CharT, _Traits>:: sungetc() { @@ -93,7 +93,7 @@ namespace std { // buffers will still be valid. (This happens if setp is used to set // the internal buffer to say some externally-allocated sequence.) template - basic_streambuf<_CharT, _Traits>::int_type + typename basic_streambuf<_CharT, _Traits>::int_type basic_streambuf<_CharT, _Traits>:: sputc(char_type __c) { diff --git a/libstdc++-v3/src/gen-num-limits.cc b/libstdc++-v3/src/gen-num-limits.cc index e52f67dc435..d5e37b7ecc4 100644 --- a/libstdc++-v3/src/gen-num-limits.cc +++ b/libstdc++-v3/src/gen-num-limits.cc @@ -206,7 +206,9 @@ template }; #define DEFINED_TYPE_NAME(T) \ +template<> \ const char type_name_trait< T >::type_name[] = #T; \ +template<> \ const char type_name_trait< T >::trait_name[] = "numeric_limits<" #T ">"; DEFINED_TYPE_NAME(bool); @@ -279,7 +281,9 @@ template const bool predicate::is_exact = true; #define SPECIALIZE_EXACTNESS(T) \ +template<> \ const bool predicate< T >::is_integer = false; \ +template<> \ const bool predicate< T >::is_exact = false SPECIALIZE_EXACTNESS(float); @@ -311,6 +315,7 @@ template const bool predicate::is_iec559 = false; #define SPECIALIZE_IEC559(T) \ +template<> \ const bool predicate< T >::is_iec559 = true SPECIALIZE_IEC559(bool); @@ -349,7 +354,9 @@ template #define DEFINE_EXTREMA(T, m, M) DO_DEFINE_EXTREMA(T, m, M) #define DO_DEFINE_EXTREMA(T, m, M) \ +template<> \ const char value< T >::min[] = #m; \ +template<> \ const char value< T >::max[] = #M DEFINE_EXTREMA(bool, false, true); @@ -386,8 +393,10 @@ const int value::digits = template const int value::radix = 2; -#define SPECIALIZE_DIGITS(T, D, D10) \ -const int value< T >::digits = D; \ +#define SPECIALIZE_DIGITS(T, D, D10) \ +template<> \ +const int value< T >::digits = D; \ +template<> \ const int value< T >::digits10 = D10 SPECIALIZE_DIGITS(float, FLT_MANT_DIG, FLT_DIG); @@ -397,7 +406,9 @@ SPECIALIZE_DIGITS(long double, LDBL_MANT_DIG, LDBL_DIG); #undef SPECIALIZE_DIGITS -#define SPECIALIZE_RADIX(T, R) const int value< T >::radix = R +#define SPECIALIZE_RADIX(T, R) \ +template<> \ +const int value< T >::radix = R SPECIALIZE_RADIX(float, FLT_RADIX); SPECIALIZE_RADIX(double, FLT_RADIX); @@ -418,7 +429,9 @@ const char value::epsilon[] = "0"; #endif #define SPECIALIZE_EPSILON(T, E) DO_SPECIALIZE_EPSILON(T, E) -#define DO_SPECIALIZE_EPSILON(T, E) const char value< T >::epsilon[] = #E +#define DO_SPECIALIZE_EPSILON(T, E) \ +template<> \ +const char value< T >::epsilon[] = #E // unsophisticated, gross method #if 1 @@ -457,7 +470,9 @@ template const char value::round_error[] = "0"; #endif -#define SPECIALIZE_ROUND_ERROR(T, R) const char value< T >::round_error[] = #R +#define SPECIALIZE_ROUND_ERROR(T, R) \ +template<> \ +const char value< T >::round_error[] = #R // unsophisticated, gross method #if 1 SPECIALIZE_ROUND_ERROR(bool, 0); @@ -494,10 +509,14 @@ const int value::max_exponent = 0; template const int value::max_exponent10 = 0; -#define SPECIALIZE_EXPONENTS(T, m, m10, M, M10) \ -const int value< T >::min_exponent = m; \ -const int value< T >::min_exponent10 = m10; \ -const int value< T >::max_exponent = M; \ +#define SPECIALIZE_EXPONENTS(T, m, m10, M, M10) \ +template<> \ +const int value< T >::min_exponent = m; \ +template<> \ +const int value< T >::min_exponent10 = m10; \ +template<> \ +const int value< T >::max_exponent = M; \ +template<> \ const int value< T >::max_exponent10 = M10 SPECIALIZE_EXPONENTS(float, FLT_MIN_EXP, FLT_MIN_10_EXP, diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc index 0d4020065a2..dfd49d1626f 100644 --- a/libstdc++-v3/src/locale.cc +++ b/libstdc++-v3/src/locale.cc @@ -603,6 +603,7 @@ namespace std return __hi; } + template<> ctype_byname::ctype_byname(const char* /*__s*/, size_t __refs) : ctype(new mask[table_size], true, __refs) { } @@ -1002,11 +1003,14 @@ namespace std return __incl_prec; } + template <> collate::collate(size_t __refs) : locale::facet(__refs) { } + template<> collate::~collate() { } + template<> int collate::do_compare(const char* __lo1, const char* __hi1, const char* __lo2, const char* __hi2) const @@ -1022,11 +1026,13 @@ namespace std return 0; } + template<> string collate:: do_transform(const char* __lo, const char* __hi) const { return string(__lo, __hi - __lo); } + template<> long collate:: do_hash(const char* __lo, const char* __hi) const @@ -1037,18 +1043,22 @@ namespace std (__val >> (numeric_limits::digits - 1))); return __val; } - + + template<> collate_byname::collate_byname(const char* /*__s*/, size_t __refs) : collate(__refs) { } + template<> moneypunct_byname::moneypunct_byname(const char* /*__s*/, size_t __refs) : moneypunct(__refs) { } + template<> moneypunct_byname::moneypunct_byname(const char* /*__s*/, size_t __refs) : moneypunct(__refs) { } + template<> messages_byname:: messages_byname(const char* /*__s*/, size_t __refs) : messages(__refs) { } @@ -1205,16 +1215,20 @@ namespace std return __hi; } + template<> ctype_byname:: ctype_byname(const char* /*__s*/, size_t __refs) : ctype(__refs) { } + template<> collate:: collate(size_t __refs): locale::facet(__refs) { } + template<> collate:: ~collate() { } + template<> int collate:: do_compare(const wchar_t* /*__lo1*/, const wchar_t* /*__hi1*/, @@ -1222,23 +1236,27 @@ namespace std { return 0; // XXX not done } - + + template<> wstring collate:: do_transform(const wchar_t* /*__lo*/, const wchar_t* /*__hi*/) const { return wstring(); // XXX not done } + template<> long collate:: do_hash(const wchar_t* /*__lo*/, const wchar_t* /*__hi*/) const { return 0; // XXX not done } + template<> collate_byname:: collate_byname(const char* /*__s*/, size_t __refs) : collate (__refs) { } + template<> messages_byname:: messages_byname(const char* /*__s*/, size_t __refs) : messages (__refs) { } -- 2.30.2