backport: basic_string.h: Qualify symbols with 'template'.
authorPhil Edwards <pme@gcc.gnu.org>
Fri, 20 Jul 2001 00:09:31 +0000 (00:09 +0000)
committerPhil Edwards <pme@gcc.gnu.org>
Fri, 20 Jul 2001 00:09:31 +0000 (00:09 +0000)
2001-07-19  Phil Edwards  <pme@sources.redhat.com>
            Mark Mitchell <mark@codesourcery.com>

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 <mark@codesourcery.com>
From-SVN: r44167

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/basic_string.h
libstdc++-v3/include/bits/basic_string.tcc
libstdc++-v3/include/bits/fstream.tcc
libstdc++-v3/include/bits/istream.tcc
libstdc++-v3/include/bits/sstream.tcc
libstdc++-v3/include/bits/std_istream.h
libstdc++-v3/include/bits/stl_iterator.h
libstdc++-v3/include/bits/streambuf.tcc
libstdc++-v3/src/gen-num-limits.cc
libstdc++-v3/src/locale.cc

index 179e073ed78e19242ac826eaa40946d9bceadbb8..761abcff8a3e5695ecde06a8fe732516da0b01d6 100644 (file)
@@ -1,3 +1,18 @@
+2001-07-19  Phil Edwards  <pme@sources.redhat.com>
+            Mark Mitchell <mark@codesourcery.com>
+
+       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  <gdr@merlin.codesourcery.com>
            Bert De Knuydt <Bert.Deknuydt@esat.kuleuven.ac.be>
 
index ef08da102f5f30620915ed29db9f22350b5c4f83..dc62a542e5e03c920ac992d4079be48a55da8551 100644 (file)
@@ -118,7 +118,7 @@ namespace std
       struct _Rep
       {
        // Types:
-       typedef typename _Alloc::rebind<char>::other _Raw_bytes_alloc;
+       typedef typename _Alloc::template rebind<char>::other _Raw_bytes_alloc;
 
        // (Public) Data members: 
 
index 9a05d2c8ac75573e8c905b219aa17a7eca8e71cc..faa88a2e6934f8ccc6efda7f23d37ada0b52ea77 100644 (file)
@@ -354,7 +354,7 @@ namespace std
 #endif
 
   template<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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<typename _CharT, typename _Traits, typename _Alloc>
-    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
     {
index 7a41ba789f6f8fde2816c005a56328741abc4d4e..54c70463d649db8db54fc1acd78573094e60c1a1 100644 (file)
@@ -139,7 +139,7 @@ namespace std
     }
 
   template<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    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)
     {
index 3d942b2feb68e980996e64c4c18f90d307b6370a..a2df71f944065d51d07803230d5b9788b40042f7 100644 (file)
@@ -465,7 +465,7 @@ namespace std
     }
 
   template<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>::int_type
+    typename basic_istream<_CharT, _Traits>::int_type
     basic_istream<_CharT, _Traits>::
     peek(void)
     {
index b2c5703f8b4b5bd1618a07a90451d3d701fcb28a..2a03ff0de58ff71c7fb7f91e7f6e2ce9b826ee09 100644 (file)
@@ -40,7 +40,7 @@ namespace std
 {
 
   template <class _CharT, class _Traits, class _Alloc>
-    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 <class _CharT, class _Traits, class _Alloc>
-    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 <class _CharT, class _Traits, class _Alloc>
-    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 <class _CharT, class _Traits, class _Alloc>
-    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)
     {
index ad8d25edb516725ae8d9f920659d10caf0074980..c4e6a9f9b3e37831b3c7093775e2692a2f13a403 100644 (file)
@@ -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 
index 7e7be72c4182998b6007c77b9d326774b978162a..a68613babd98af003c24f99a543e7a39ceb1ab3b 100644 (file)
@@ -442,7 +442,7 @@ namespace std
 
   template<typename _Iterator, typename _Container>
   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
index a21ad1cb9d74350553fc58898c7dee5d4e73fd45..d928379918a4f335c3276939a3ce412a0101c9d1 100644 (file)
@@ -37,7 +37,7 @@
 namespace std {
 
   template<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    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<typename _CharT, typename _Traits>
-    basic_streambuf<_CharT, _Traits>::int_type
+    typename basic_streambuf<_CharT, _Traits>::int_type
     basic_streambuf<_CharT, _Traits>::
     sputc(char_type __c)
     {
index e52f67dc43589919602f2f6a4ac90401182a9857..d5e37b7ecc44c5b28d35394cb38ddde08d61480e 100644 (file)
@@ -206,7 +206,9 @@ template<typename T>
   };
 
 #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<typename T>
 const bool predicate<T>::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<typename T>
 const bool predicate<T>::is_iec559 = false;
 
 #define SPECIALIZE_IEC559(T)                                           \
+template<>                                                              \
 const bool predicate< T >::is_iec559 = true
 
 SPECIALIZE_IEC559(bool);
@@ -349,7 +354,9 @@ template<typename T>
 
 #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<T>::digits =
 template<typename T>
 const int value<T>::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<T>::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<typename T>
 const char value<T>::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<T>::max_exponent = 0;
 template<typename T>
 const int value<T>::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,
index 0d4020065a25f516645b8955eded7c77fb73ec1e..dfd49d1626fb596c1596b1034d686b275a2a8bad 100644 (file)
@@ -603,6 +603,7 @@ namespace std
     return __hi;
   }
 
+  template<>
   ctype_byname<char>::ctype_byname(const char* /*__s*/, size_t __refs)
   : ctype<char>(new mask[table_size], true, __refs)
   { }
@@ -1002,11 +1003,14 @@ namespace std
     return __incl_prec;
   }
 
+  template <>
   collate<char>::collate(size_t __refs)
   : locale::facet(__refs) { }
   
+  template<>
   collate<char>::~collate() { }
   
+  template<>
   int 
   collate<char>::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<char>::
   do_transform(const char* __lo, const char* __hi) const
   { return string(__lo, __hi - __lo); }
   
+  template<>
   long
   collate<char>::
   do_hash(const char* __lo, const char* __hi) const
@@ -1037,18 +1043,22 @@ namespace std
                   (__val >> (numeric_limits<unsigned long>::digits - 1)));
     return __val;
   }
-  
+
+  template<>  
   collate_byname<char>::collate_byname(const char* /*__s*/, size_t __refs)
   : collate<char>(__refs) { }
 
+  template<>
   moneypunct_byname<char, false>::moneypunct_byname(const char* /*__s*/, 
                                                    size_t __refs)
   : moneypunct<char, false>(__refs) { }
   
+  template<>
   moneypunct_byname<char, true>::moneypunct_byname(const char* /*__s*/, 
                                                   size_t __refs)
   : moneypunct<char, true>(__refs) { }
   
+  template<>
   messages_byname<char>::
   messages_byname(const char* /*__s*/, size_t __refs)
   : messages<char>(__refs) { }
@@ -1205,16 +1215,20 @@ namespace std
     return __hi;
   }
 
+  template<>
   ctype_byname<wchar_t>::
   ctype_byname(const char* /*__s*/, size_t __refs)
   : ctype<wchar_t>(__refs) { }
 
+  template<>
   collate<wchar_t>::
   collate(size_t __refs): locale::facet(__refs) { }
   
+  template<>
   collate<wchar_t>::
   ~collate() { }
 
+  template<>
   int 
   collate<wchar_t>::
   do_compare(const wchar_t* /*__lo1*/, const wchar_t* /*__hi1*/,
@@ -1222,23 +1236,27 @@ namespace std
   {
     return 0; // XXX not done
   }
-  
+
+  template<>  
   wstring collate<wchar_t>::
   do_transform(const wchar_t* /*__lo*/, const wchar_t* /*__hi*/) const
   {
     return wstring(); // XXX not done
   }
   
+  template<>
   long collate<wchar_t>::
   do_hash(const wchar_t* /*__lo*/, const wchar_t* /*__hi*/) const
   {
     return 0; // XXX not done
   }
 
+  template<>
   collate_byname<wchar_t>::
   collate_byname(const char* /*__s*/, size_t __refs)
   : collate<wchar_t> (__refs) { }
   
+  template<>
   messages_byname<wchar_t>::
   messages_byname(const char* /*__s*/, size_t __refs)
   : messages<wchar_t> (__refs) { }