diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index c0112cff633d0496023db396b8b5c4cc2707988a..a39f2528368ce373614ad2099537d3015180e05a 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,27 @@
+2002-12-27  Mark Mitchell  <mark@codesourcery.com>
+
+	* config/locale/gnu/ctype_members.cc
+	(ctype<wchar_t>::_M_convert_to_wmask): Remove stray semicolon.
+	* config/locale/gnu/monetary_members.cc
+	(moneypunct<wchar_t, true>::_M_initialize_moneypunct): Avoid
+	defining classes in static_cast.
+	(moneypunct<wchar_t, false>::_M_initialize_moneypunct): Likewise.
+	* config/locale/gnu/numeric_members.cc
+	(numpunct<wchar_t, false>::_M_initialize_numpunct): Likewise.
+	* include/bits/stl_deque.h (operator-): Insert typename where
+	required.
+	* include/bits/stl_multiset.h (multiset): Remove stray semicolon.
+	* include/bits/stl_set.h (set): Likewise.
+	* include/bits/valarray_meta.h (bits/slice_array.h): Include it.
+	* include/std/std_fstream.h (basic_fstream::open): Use this-> to
+	avoid Koenig lookup.
+	(basic_fstream::close): Likewise.
+	* libsupc++/new (operator delete): Remove stray semicolon.
+	* libsupc++/new (operator delete[]): Likewise.
+	* libsupc++/tinfo.cc: Likewise.
+	* src/stdexcept.c (logic_error::~logic_error): Likewise.
+	(runtime_error::~runtime_error): Likewise.
+	
 2002-12-26  Phil Edwards  <pme@gcc.gnu.org>
 
 	* libsupc++/exception:  Add comment (mistakenly skipped).
diff --git a/libstdc++-v3/config/locale/gnu/ctype_members.cc b/libstdc++-v3/config/locale/gnu/ctype_members.cc
index e0be949f2cc5d5ea7740813913c420aac86739f6..8bc2559096eca00f1c118365f0546285b2e31f98 100644
--- a/libstdc++-v3/config/locale/gnu/ctype_members.cc
+++ b/libstdc++-v3/config/locale/gnu/ctype_members.cc
@@ -95,7 +95,7 @@ namespace std
 	__ret = 0;
       }
     return __ret;
-  };
+  }
   
   wchar_t
   ctype<wchar_t>::do_toupper(wchar_t __c) const
diff --git a/libstdc++-v3/config/locale/gnu/monetary_members.cc b/libstdc++-v3/config/locale/gnu/monetary_members.cc
index b3ef13b234164071ce2206bb939be1398f26d9e0..91080da0d370e8be6ac29f9b3bc512dd15a7a301 100644
--- a/libstdc++-v3/config/locale/gnu/monetary_members.cc
+++ b/libstdc++-v3/config/locale/gnu/monetary_members.cc
@@ -347,9 +347,12 @@ namespace std
 	  setlocale(LC_ALL, __name);
 #endif
 
-	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
+	  union __s_and_w { const char *__s; unsigned int __w; } __u;
+	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
+	  _M_decimal_point = static_cast<wchar_t>(__u.__w);
 
-	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
+	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
+	  _M_thousands_sep = static_cast<wchar_t>(__u.__w);
 	  _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
 
 	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
@@ -448,8 +451,12 @@ namespace std
 	  setlocale(LC_ALL, __name);
 #endif
 
-	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
-	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
+	  union __s_and_w { const char *__s; unsigned int __w; } __u;
+	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
+	  _M_decimal_point = static_cast<wchar_t>(__u.__w);
+
+	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
+	  _M_thousands_sep = static_cast<wchar_t>(__u.__w);
 	  _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
 
 	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
diff --git a/libstdc++-v3/config/locale/gnu/numeric_members.cc b/libstdc++-v3/config/locale/gnu/numeric_members.cc
index 1aa05293d4cc092e229cdfaf0740baa737a5e657..5b666ebe608d8b5dec2fd925dbb8c7b3f181566c 100644
--- a/libstdc++-v3/config/locale/gnu/numeric_members.cc
+++ b/libstdc++-v3/config/locale/gnu/numeric_members.cc
@@ -86,8 +86,12 @@ namespace std
       else
 	{
 	  // Named locale.
-	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
-	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
+	  union __s_and_w { const char *__s; unsigned int __w; } __u;
+	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
+	  _M_decimal_point = static_cast<wchar_t>(__u.__w);
+
+	  __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
+	  _M_thousands_sep = static_cast<wchar_t>(__u.__w);
 	  if (_M_thousands_sep == L'\0')
 	    _M_grouping = "";
 	  else
diff --git a/libstdc++-v3/include/bits/stl_deque.h b/libstdc++-v3/include/bits/stl_deque.h
index bc89059040f549405825075181970b38f0edecd5..467d73908da31d9d6974e2bc197541002d83f75f 100644
--- a/libstdc++-v3/include/bits/stl_deque.h
+++ b/libstdc++-v3/include/bits/stl_deque.h
@@ -319,7 +319,7 @@ namespace std
   operator-(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
   	  const _Deque_iterator<_Tp, _RefR, _PtrR>& __y)
   {
-    return _Deque_iterator<_Tp, _RefL, _PtrL>::difference_type
+    return typename _Deque_iterator<_Tp, _RefL, _PtrL>::difference_type
       (_Deque_iterator<_Tp, _RefL, _PtrL>::_S_buffer_size()) *
       (__x._M_node - __y._M_node - 1) + (__x._M_cur - __x._M_first) +
       (__y._M_last - __y._M_cur);
diff --git a/libstdc++-v3/include/bits/stl_multiset.h b/libstdc++-v3/include/bits/stl_multiset.h
index 2bfc8f10c32b47c1cb82896336af5b67b90f6221..2791a2f2f34abc6b4e0cb33266c04b02b91d2f47 100644
--- a/libstdc++-v3/include/bits/stl_multiset.h
+++ b/libstdc++-v3/include/bits/stl_multiset.h
@@ -1,6 +1,6 @@
 // Multiset implementation -*- C++ -*-
 
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002 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
@@ -85,7 +85,7 @@ class multiset
 {
   // concept requirements
   __glibcpp_class_requires(_Key, _SGIAssignableConcept)
-  __glibcpp_class_requires4(_Compare, bool, _Key, _Key, _BinaryFunctionConcept);
+  __glibcpp_class_requires4(_Compare, bool, _Key, _Key, _BinaryFunctionConcept)
 
 public:
 
diff --git a/libstdc++-v3/include/bits/stl_set.h b/libstdc++-v3/include/bits/stl_set.h
index ee708c292179a07fd884cf340a01a4f689cf8a3c..b6f70e8bbebb307fc8f900300965d9fe55c02d15 100644
--- a/libstdc++-v3/include/bits/stl_set.h
+++ b/libstdc++-v3/include/bits/stl_set.h
@@ -1,6 +1,6 @@
 // Set implementation -*- C++ -*-
 
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002 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
@@ -86,7 +86,7 @@ class set
 {
   // concept requirements
   __glibcpp_class_requires(_Key, _SGIAssignableConcept)
-  __glibcpp_class_requires4(_Compare, bool, _Key, _Key, _BinaryFunctionConcept);
+  __glibcpp_class_requires4(_Compare, bool, _Key, _Key, _BinaryFunctionConcept)
 
 public:
   // typedefs:
diff --git a/libstdc++-v3/include/bits/valarray_meta.h b/libstdc++-v3/include/bits/valarray_meta.h
index 8b3e74fedc3bd21a883754418e9bbbbe2becf5fb..457f6bb5b71556f5cfd6a6a7a536c65fcb96a482 100644
--- a/libstdc++-v3/include/bits/valarray_meta.h
+++ b/libstdc++-v3/include/bits/valarray_meta.h
@@ -1,6 +1,6 @@
 // The template and inlines for the -*- C++ -*- internal _Meta class.
 
-// Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 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
@@ -39,6 +39,8 @@
 
 #pragma GCC system_header
 
+#include <bits/slice_array.h>
+
 namespace std
 {
   //
diff --git a/libstdc++-v3/include/std/std_fstream.h b/libstdc++-v3/include/std/std_fstream.h
index 685a38dd94439ce0589c71c1faabfb633d3f7293..4e2e8447f3b1224958c2af35051302a2703ca2ae 100644
--- a/libstdc++-v3/include/std/std_fstream.h
+++ b/libstdc++-v3/include/std/std_fstream.h
@@ -797,7 +797,7 @@ namespace std
 	   ios_base::openmode __mode = ios_base::in | ios_base::out)
       {
 	if (!_M_filebuf.open(__s, __mode))
-	  setstate(ios_base::failbit);
+	  this->setstate(ios_base::failbit);
       }
 
       /**
@@ -810,7 +810,7 @@ namespace std
       close()
       {
 	if (!_M_filebuf.close())
-	  setstate(ios_base::failbit);
+	  this->setstate(ios_base::failbit);
       }
     };
 } // namespace std
diff --git a/libstdc++-v3/libsupc++/new b/libstdc++-v3/libsupc++/new
index af19ed810aabc8762732537d3f6b096a63c761f0..b883128901f2f2f7b6f9d30c2d1ac49667a998d0 100644
--- a/libstdc++-v3/libsupc++/new
+++ b/libstdc++-v3/libsupc++/new
@@ -93,8 +93,8 @@ inline void* operator new(std::size_t, void* __p) throw() { return __p; }
 inline void* operator new[](std::size_t, void* __p) throw() { return __p; }
 
 // Default placement versions of operator delete.
-inline void  operator delete  (void*, void*) throw() { };
-inline void  operator delete[](void*, void*) throw() { };
+inline void  operator delete  (void*, void*) throw() { }
+inline void  operator delete[](void*, void*) throw() { }
 //@}
 } // extern "C++"
 
diff --git a/libstdc++-v3/libsupc++/tinfo.cc b/libstdc++-v3/libsupc++/tinfo.cc
index adafc25e3775ed5c415900c03f5b09dd88460ef9..74d13834af4db61f920280b371aaf622158e5a7e 100644
--- a/libstdc++-v3/libsupc++/tinfo.cc
+++ b/libstdc++-v3/libsupc++/tinfo.cc
@@ -85,7 +85,7 @@ __do_upcast (const abi::__class_type_info *, void **) const
   return false;
 }
 
-};
+}
 
 namespace {
 
@@ -172,7 +172,7 @@ inline bool contained_nonvirtual_p (__class_type_info::__sub_kind access_path)
 static const __class_type_info *const nonvirtual_base_type =
     static_cast <const __class_type_info *> (0) + 1;
 
-}; // namespace
+} // namespace
 
 namespace __cxxabiv1
 {
@@ -735,4 +735,4 @@ __dynamic_cast (const void *src_ptr,    // object started from
   return NULL;
 }
 
-}; // namespace __cxxabiv1
+} // namespace __cxxabiv1
diff --git a/libstdc++-v3/src/stdexcept.cc b/libstdc++-v3/src/stdexcept.cc
index d39d41ffef658b587be14ae232df77fae0f60009..5db7c68d36d5be0a4155c64e4ef75f51f3273830 100644
--- a/libstdc++-v3/src/stdexcept.cc
+++ b/libstdc++-v3/src/stdexcept.cc
@@ -1,6 +1,6 @@
 // Methods for Exception Support for -*- C++ -*-
 
-// Copyright (C) 1997, 1999, 2001 Free Software Foundation, Inc.
+// Copyright (C) 1997, 1999, 2001, 2002 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
@@ -39,7 +39,7 @@ namespace std
   logic_error::logic_error(const string& __arg) 
   : exception(), _M_msg(__arg) { }
 
-  logic_error::~logic_error() throw() { };
+  logic_error::~logic_error() throw() { }
 
   const char*
   logic_error::what() const throw()
@@ -60,7 +60,7 @@ namespace std
   runtime_error::runtime_error(const string& __arg) 
   : exception(), _M_msg(__arg) { }
 
-  runtime_error::~runtime_error() throw() { };
+  runtime_error::~runtime_error() throw() { }
 
   const char*
   runtime_error::what() const throw()