diff -ur src.orig/CORE/EXCEPT.CPP src/CORE/except.cpp
--- src.orig/CORE/EXCEPT.CPP	Mon Jan 06 16:31:16 2003
+++ src/CORE/except.cpp	Thu Jan 09 15:59:10 2003
@@ -9,7 +9,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#include <eh.h>
+#include <exception>
 #include "ehsup.h"
 #include "mt.h"
 
@@ -116,8 +116,8 @@
 
 
 
-__eh_fp terminate_fp;
-__eh_fp unexpected_fp;
+std::terminate_handler terminate_fp;
+std::unexpected_handler unexpected_fp;
 
 /*********************************
  * A fatal error happened.
@@ -161,9 +161,14 @@
     abort();         // default behavior
 }
 
-__eh_fp set_terminate(__eh_fp fp)
+std::terminate_handler set_terminate(std::terminate_handler fp)
+{
+  return std::set_terminate(fp);
+}
+
+std::terminate_handler std::set_terminate(std::terminate_handler fp) throw()
 {   
-    __eh_fp oldfp;
+    std::terminate_handler oldfp;
 
     oldfp = terminate_fp;
     terminate_fp = fp;
@@ -172,6 +177,11 @@
 
 void terminate()
 {
+  std::terminate();
+}
+
+void std::terminate()
+{
 #if defined(_MT)
     _getthreaddata()->t_cppeh_sv.terminate_nest++;
 #else
@@ -196,9 +206,14 @@
     terminate();      // default behavior
 }
 
-__eh_fp set_unexpected(__eh_fp fp)
+std::unexpected_handler set_unexpected(std::unexpected_handler fp)
+{
+  return std::set_unexpected(fp);
+}
+
+std::unexpected_handler std::set_unexpected(std::unexpected_handler fp) throw()
 {   
-    __eh_fp oldfp;
+    std::unexpected_handler oldfp;
 
     oldfp = unexpected_fp;
     unexpected_fp = fp;
@@ -207,6 +222,11 @@
 
 void unexpected()
 {
+  std::unexpected();
+}
+
+void std::unexpected()
+{
     if (unexpected_fp) 
         (*unexpected_fp)();
     else
@@ -1508,5 +1528,53 @@
     return 1;
 }
 
+
+namespace std
+{
+exception::exception() throw()
+{
+}
+
+exception::exception(const exception&) throw()
+{
+}
+
+exception& exception::operator=(const exception&) throw()
+{
+    return *this;
+}
+
+exception::~exception() throw()
+{
+}
+
+const char *exception::what() const throw()
+{
+    return "exception";
+}
+
+
+bad_exception::bad_exception() throw()
+{
+}
+
+bad_exception::bad_exception(const bad_exception&) throw()
+{
+}
+
+bad_exception& bad_exception::operator=(const bad_exception&) throw()
+{
+    return *this;
+}
+
+bad_exception::~bad_exception() throw()
+{
+}
+
+const char *bad_exception::what() const throw()
+{
+    return "bad_exception";
+}
+}
 
 #endif
diff -ur src.orig/CORE/RTTI.CPP src/CORE/RTTI.CPP
--- src.orig/CORE/RTTI.CPP	Thu Jan 02 14:47:16 1997
+++ src/CORE/RTTI.CPP	Thu Jan 09 16:21:30 2003
@@ -3,7 +3,7 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include <typeinfo.h>
+#include <typeinfo>
 
 /*********************************
  * Match types.
@@ -188,7 +188,7 @@
         goto retnull;
 
     // Get dynamic type of p
-    d = ((Type_info *)t)->pdata;
+    d = ((std::type_info *)t)->pdata;
 
     // If T is a void* then convert p to a pointer
     // to the complete object.
@@ -256,8 +256,7 @@
 fail:
     if (flag & 1)
     {   
-        Bad_cast bc;
-        throw bc;
+        throw std::bad_cast();
     }
 retnull:
     return NULL;
diff -ur src.orig/CORE/TYPEINFO.CPP src/CORE/TYPEINFO.CPP
--- src.orig/CORE/TYPEINFO.CPP	Thu Jan 02 14:47:22 1997
+++ src/CORE/TYPEINFO.CPP	Thu Jan 09 22:44:34 2003
@@ -1,43 +1,86 @@
 //_ typeinfo.cpp
 // RTL support for Type_info
 
-#include <typeinfo.h>
+#include <typeinfo>
 #include <string.h>
 
 /***********************************
  */
 
-__cdecl Type_info::Type_info(const Type_info& ti)
+// backward compatibility Type_info interface
+Type_info::Type_info(const Type_info& ti)
+  : std::type_info(ti)
+{ }
+
+Type_info& Type_info::operator=(const Type_info& ti)
+{
+    std::type_info::operator=(ti);
+    return *this;
+}
+
+Type_info::~Type_info()
+{
+}
+
+extern "C" void __cdecl _Type_info_destructor(Type_info *ti)
+{
+  ti->Type_info::~Type_info();
+}
+#pragma alias("??1Type_info@@UAA@XZ", "__Type_info_destructor")
+
+int Type_info::operator==(const Type_info& ti) const
+{
+    return std::type_info::operator==(ti);
+}
+
+int Type_info::operator!=(const Type_info& ti) const
+{
+    return std::type_info::operator!=(ti);
+}
+
+int Type_info::before(const Type_info& ti)
+{
+    return std::type_info::before(ti);
+}
+
+const char *Type_info::name() const
+{
+    return std::type_info::name();
+}
+
+namespace std
+{
+type_info::type_info(const type_info& ti)
 {
     pdata = ti.pdata;
 }
 
-Type_info& __cdecl Type_info::operator=(const Type_info& ti)
+type_info& type_info::operator=(const type_info& ti)
 {
     pdata = ti.pdata;
     return *this;
 }
 
-__cdecl Type_info::~Type_info()
+type_info::~type_info()
 {
 }
 
-int __cdecl Type_info::operator==(const Type_info& ti) const
+bool type_info::operator==(const type_info& ti) const
 {
     return this == &ti;
 }
 
-int __cdecl Type_info::operator!=(const Type_info& ti) const
+bool type_info::operator!=(const type_info& ti) const
 {
     return this != &ti;
 }
 
-int __cdecl Type_info::before(const Type_info& ti)
+bool type_info::before(const type_info& ti)
 {
     return strcmp(name(),ti.name()) < 0;
 }
 
-const char * __cdecl Type_info::name() const
+const char *type_info::name() const
 {   char *p;
     unsigned nbases;
 
@@ -56,9 +99,55 @@
 	    p += 2 + nbases * (sizeof(int) + sizeof(p));
 	    break;
 	default:
-	    p = "bad Type_info";
+	    p = "bad type_info";
 	    break;
     }
     return p;
 }
 
+
+bad_cast::bad_cast() throw()
+{
+}
+
+bad_cast::bad_cast(const bad_cast&) throw()
+{
+}
+
+bad_cast& bad_cast::operator=(const bad_cast&) throw()
+{
+    return *this;
+}
+
+bad_cast::~bad_cast() throw()
+{
+}
+
+const char *bad_cast::what() const throw()
+{
+    return "bad_cast";
+}
+
+
+bad_typeid::bad_typeid() throw()
+{
+}
+
+bad_typeid::bad_typeid(const bad_typeid&) throw()
+{
+}
+
+bad_typeid& bad_typeid::operator=(const bad_typeid&) throw()
+{
+    return *this;
+}
+
+bad_typeid::~bad_typeid() throw()
+{
+}
+
+const char *bad_typeid::what() const throw()
+{
+    return "bad_typeid";
+}
+}
