diff -rupN boost_1_43_0/boost/system/error_code.hpp boost_vms_1_43_0/boost/system/error_code.hpp --- boost_1_43_0/boost/system/error_code.hpp 2009-11-13 16:37:32.000000000 +0200 +++ boost_vms_1_43_0/boost/system/error_code.hpp 2010-07-08 18:04:00.000000000 +0300 @@ -463,8 +463,13 @@ namespace boost inline std::size_t hash_value( const error_code & ec ) { + #if defined(__VMS) && __INITIAL_POINTER_SIZE == 64 + return static_cast(ec.value()) + + reinterpret_cast(&ec.category()); + #else return static_cast(ec.value()) + reinterpret_cast(&ec.category()); + #endif } // make_* functions for errc::errc_t -----------------------------// diff -rupN boost_1_43_0/boost/system/system_error.hpp boost_vms_1_43_0/boost/system/system_error.hpp --- boost_1_43_0/boost/system/system_error.hpp 2008-07-11 04:25:09.000000000 +0300 +++ boost_vms_1_43_0/boost/system/system_error.hpp 2010-07-08 18:04:00.000000000 +0300 @@ -61,7 +61,13 @@ namespace boost { try { - m_what = this->std::runtime_error::what(); + #ifdef __VMS + // Workaround for standard library bug, it may return NULL pointer + char const *tmp = this->std::runtime_error::what(); + m_what = tmp ? tmp : ""; + #else + m_what = this->std::runtime_error::what(); + #endif if ( m_error_code ) { if ( !m_what.empty() ) m_what += ": "; diff -rupN boost_1_43_0/libs/system/src/error_code.cpp boost_vms_1_43_0/libs/system/src/error_code.cpp --- boost_1_43_0/libs/system/src/error_code.cpp 2010-07-11 11:27:16.000000000 +0300 +++ boost_vms_1_43_0/libs/system/src/error_code.cpp 2010-07-11 11:27:31.000000000 +0300 @@ -189,7 +189,9 @@ namespace case EILSEQ: return make_error_condition( illegal_byte_sequence ); case EINPROGRESS: return make_error_condition( operation_in_progress ); case EINTR: return make_error_condition( interrupted ); + #ifndef __VMS case EINVAL: return make_error_condition( invalid_argument ); + #endif case EIO: return make_error_condition( io_error ); case EISCONN: return make_error_condition( already_connected ); case EISDIR: return make_error_condition( is_a_directory );