1 // Copyright David Abrahams 2002. 2 // Distributed under the Boost Software License, Version 1.0. (See 3 // accompanying file LICENSE_1_0.txt or copy at 4 // http://www.boost.org/LICENSE_1_0.txt) 5 #ifndef CONSTRUCT_REFERENCE_DWA2002716_HPP 6 # define CONSTRUCT_REFERENCE_DWA2002716_HPP 7 8 namespace boost { namespace python { namespace detail { 9 10 template <class T, class Arg> 11 void construct_pointee(void* storage, Arg& x, T const volatile*) 12 { 13 new (storage) T(x); 14 } 15 16 template <class T, class Arg> 17 void construct_referent_impl(void* storage, Arg& x, T&(*)()) 18 { 19 construct_pointee(storage, x, (T*)0); 20 } 21 22 template <class T, class Arg> 23 void construct_referent(void* storage, Arg const& x, T(*tag)() = 0) 24 { 25 construct_referent_impl(storage, x, tag); 26 } 27 28 template <class T, class Arg> 29 void construct_referent(void* storage, Arg& x, T(*tag)() = 0) 30 { 31 construct_referent_impl(storage, x, tag); 32 } 33 34 }}} // namespace boost::python::detail 35 36 #endif // CONSTRUCT_REFERENCE_DWA2002716_HPP 37