Cast to derived holder using container type when using std::enable_shared_from_this.

Allows const types to be used by shared_ptr
This commit is contained in:
hbruintjes 2016-07-01 12:39:55 +02:00
parent 3eeea6fa61
commit 70d2e57b09

View File

@ -887,7 +887,7 @@ private:
template <typename T> template <typename T>
static void init_holder_helper(instance_type *inst, const holder_type * /* unused */, const std::enable_shared_from_this<T> * /* dummy */) { static void init_holder_helper(instance_type *inst, const holder_type * /* unused */, const std::enable_shared_from_this<T> * /* dummy */) {
try { try {
new (&inst->holder) holder_type(std::static_pointer_cast<type>(inst->value->shared_from_this())); new (&inst->holder) holder_type(std::static_pointer_cast<typename holder_type::element_type>(inst->value->shared_from_this()));
} catch (const std::bad_weak_ptr &) { } catch (const std::bad_weak_ptr &) {
new (&inst->holder) holder_type(inst->value); new (&inst->holder) holder_type(inst->value);
} }