diff -rupN boost_1_43_0/boost/function/function_base.hpp boost_vms_1_43_0/boost/function/function_base.hpp --- boost_1_43_0/boost/function/function_base.hpp 2009-12-06 19:50:28.000000000 +0200 +++ boost_vms_1_43_0/boost/function/function_base.hpp 2010-07-11 17:40:44.000000000 +0300 @@ -711,15 +711,21 @@ public: else return true; } #endif +private: + #if defined(__VMS) && __INITIAL_POINTER_SIZE==64 + typedef unsigned long long uintptr_type; + #else + typedef std::size_t uintptr_type; + #endif public: // should be protected, but GCC 2.95.3 will fail to allow access detail::function::vtable_base* get_vtable() const { return reinterpret_cast( - reinterpret_cast(vtable) & ~(std::size_t)0x01); + reinterpret_cast(vtable) & ~(uintptr_type)0x01); } bool has_trivial_copy_and_destroy() const { - return reinterpret_cast(vtable) & 0x01; + return (reinterpret_cast(vtable) & 0x01)!=0; } detail::function::vtable_base* vtable; diff -rupN boost_1_43_0/boost/function/function_template.hpp boost_vms_1_43_0/boost/function/function_template.hpp --- boost_1_43_0/boost/function/function_template.hpp 2009-07-09 02:23:52.000000000 +0300 +++ boost_vms_1_43_0/boost/function/function_template.hpp 2010-07-15 10:23:52.000000000 +0300 @@ -674,10 +674,15 @@ namespace boost { typedef boost::detail::function::BOOST_FUNCTION_VTABLE< R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS> vtable_type; + #if defined(__VMS) && __INITIAL_POINTER_SIZE == 64 + typedef unsigned long long uintptr_type; + #else + typedef std::size_t uintptr_type; + #endif vtable_type* get_vtable() const { return reinterpret_cast( - reinterpret_cast(vtable) & ~(std::size_t)0x01); + reinterpret_cast(vtable) & ~(uintptr_type)0x01); } struct clear_type {}; @@ -913,11 +918,11 @@ namespace boost { { { &manager_type::manage }, &invoker_type::invoke }; if (stored_vtable.assign_to(f, functor)) { - std::size_t value = reinterpret_cast(&stored_vtable.base); + uintptr_type value = reinterpret_cast(&stored_vtable.base); if (boost::has_trivial_copy_constructor::value && boost::has_trivial_destructor::value && detail::function::function_allows_small_object_optimization::value) - value |= (std::size_t)0x01; + value |= (uintptr_type)0x01; vtable = reinterpret_cast(value); } else vtable = 0; @@ -947,11 +952,11 @@ namespace boost { { { &manager_type::manage }, &invoker_type::invoke }; if (stored_vtable.assign_to_a(f, functor, a)) { - std::size_t value = reinterpret_cast(&stored_vtable.base); + uintptr_type value = reinterpret_cast(&stored_vtable.base); if (boost::has_trivial_copy_constructor::value && boost::has_trivial_destructor::value && detail::function::function_allows_small_object_optimization::value) - value |= (std::size_t)0x01; + value |= (uintptr_type)0x01; vtable = reinterpret_cast(value); } else vtable = 0;