]>
Commit | Line | Data |
---|---|---|
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 |