Chris@16: // Copyright David Abrahams 2002. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: #ifndef VOID_PTR_DWA200239_HPP Chris@16: # define VOID_PTR_DWA200239_HPP Chris@16: Chris@16: # include Chris@16: Chris@16: namespace boost { namespace python { namespace detail { Chris@16: Chris@16: template Chris@16: inline U& void_ptr_to_reference(void const volatile* p, U&(*)()) Chris@16: { Chris@16: return *(U*)p; Chris@16: } Chris@16: Chris@16: template Chris@16: inline void write_void_ptr(void const volatile* storage, void* ptr, T*) Chris@16: { Chris@16: *(T**)storage = (T*)ptr; Chris@16: } Chris@16: Chris@16: // writes U(ptr) into the storage Chris@16: template Chris@16: inline void write_void_ptr_reference(void const volatile* storage, void* ptr, U&(*)()) Chris@16: { Chris@16: // stripping CV qualification suppresses warnings on older EDGs Chris@16: typedef typename remove_cv::type u_stripped; Chris@16: write_void_ptr(storage, ptr, u_stripped(0)); Chris@16: } Chris@16: Chris@16: }}} // namespace boost::python::detail Chris@16: Chris@16: #endif // VOID_PTR_DWA200239_HPP