This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: merging from new parser branch (was Re: Common V3 coding bug)
On Thu, Jul 19, 2001 at 02:24:00PM -0700, Mark Mitchell wrote:
> > No you haven't. :-) Or rather, the only diffs showing up in my merge are
> > things like adding 'template<>' to specializations, and 'typename' at the
> > appropriate points. I haven't seen any 'this->member' nor 'base::member'
> > showing up. Have such changes already been checked into the trunk?
>
> Nope; they're still on my local disk. :-( I'll be making another check-in
> soon, so you'll see them when you check again in a week or two...
Excellent. This then is what I'll be committing soon if nobody complains.
2001-07-19 Phil Edwards <pme@sources.redhat.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.
Index: include/bits/basic_string.h
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/basic_string.h,v
retrieving revision 1.8
diff -u -3 -p -r1.8 basic_string.h
--- basic_string.h 2001/06/12 02:30:37 1.8
+++ basic_string.h 2001/07/19 21:49:36
@@ -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: include/bits/basic_string.tcc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/basic_string.tcc,v
retrieving revision 1.5
diff -u -3 -p -r1.5 basic_string.tcc
--- basic_string.tcc 2001/06/12 02:30:37 1.5
+++ basic_string.tcc 2001/07/19 21:49:37
@@ -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: include/bits/fstream.tcc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/fstream.tcc,v
retrieving revision 1.15
diff -u -3 -p -r1.15 fstream.tcc
--- fstream.tcc 2001/06/12 23:09:09 1.15
+++ fstream.tcc 2001/07/19 21:49:37
@@ -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: include/bits/istream.tcc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/istream.tcc,v
retrieving revision 1.17
diff -u -3 -p -r1.17 istream.tcc
--- istream.tcc 2001/06/12 22:14:08 1.17
+++ istream.tcc 2001/07/19 21:49:37
@@ -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: include/bits/sstream.tcc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/sstream.tcc,v
retrieving revision 1.2
diff -u -3 -p -r1.2 sstream.tcc
--- sstream.tcc 2001/03/04 21:34:00 1.2
+++ sstream.tcc 2001/07/19 21:49:37
@@ -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: include/bits/std_istream.h
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/std_istream.h,v
retrieving revision 1.6
diff -u -3 -p -r1.6 std_istream.h
--- std_istream.h 2001/05/31 20:33:06 1.6
+++ std_istream.h 2001/07/19 21:49:37
@@ -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: include/bits/stl_iterator.h
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/stl_iterator.h,v
retrieving revision 1.12
diff -u -3 -p -r1.12 stl_iterator.h
--- stl_iterator.h 2001/07/09 21:47:36 1.12
+++ stl_iterator.h 2001/07/19 21:49:37
@@ -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: include/bits/streambuf.tcc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/streambuf.tcc,v
retrieving revision 1.7
diff -u -3 -p -r1.7 streambuf.tcc
--- streambuf.tcc 2001/06/27 01:07:28 1.7
+++ streambuf.tcc 2001/07/19 21:49:37
@@ -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: src/gen-num-limits.cc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/src/gen-num-limits.cc,v
retrieving revision 1.12
diff -u -3 -p -r1.12 gen-num-limits.cc
--- gen-num-limits.cc 2001/07/19 03:06:01 1.12
+++ gen-num-limits.cc 2001/07/19 21:49:37
@@ -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
#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: src/locale.cc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/src/locale.cc,v
retrieving revision 1.36
diff -u -3 -p -r1.36 locale.cc
--- locale.cc 2001/07/04 02:39:02 1.36
+++ locale.cc 2001/07/19 21:49:37
@@ -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) { }