mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 08:03:55 +00:00
support std::shared_ptr<const X> and types that indirectly derive from std::enable_shared_from_this
This commit is contained in:
parent
fdc00f5077
commit
309a85ba59
@ -204,7 +204,7 @@ public:
|
||||
protected:
|
||||
template <typename T = type, typename std::enable_if<detail::is_copy_constructible<T>::value, int>::type = 0>
|
||||
static void *copy_constructor(const void *arg) {
|
||||
return new type(*((const type *) arg));
|
||||
return (void *) new type(*((const type *) arg));
|
||||
}
|
||||
template <typename T = type, typename std::enable_if<!detail::is_copy_constructible<T>::value, int>::type = 0>
|
||||
static void *copy_constructor(const void *) { return nullptr; }
|
||||
@ -508,7 +508,7 @@ public:
|
||||
return true;
|
||||
} else if (PyType_IsSubtype(Py_TYPE(src.ptr()), typeinfo->type)) {
|
||||
auto inst = (instance<type, holder_type> *) src.ptr();
|
||||
value = inst->value;
|
||||
value = (void *) inst->value;
|
||||
holder = inst->holder;
|
||||
return true;
|
||||
}
|
||||
|
@ -864,7 +864,7 @@ private:
|
||||
template <typename T>
|
||||
static void init_holder_helper(instance_type *inst, const holder_type * /* unused */, const std::enable_shared_from_this<T> * /* dummy */) {
|
||||
try {
|
||||
new (&inst->holder) holder_type(inst->value->shared_from_this());
|
||||
new (&inst->holder) holder_type(std::static_pointer_cast<type>(inst->value->shared_from_this()));
|
||||
} catch (const std::bad_weak_ptr &) {
|
||||
new (&inst->holder) holder_type(inst->value);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user