From cf42e4c1a445e7635a85f5aa812a5c3edd1fbc52 Mon Sep 17 00:00:00 2001 From: Tomasz Grabiec Date: Tue, 16 Jun 2015 19:28:24 +0200 Subject: [PATCH] core: Fix enable_lw_shared_from_this::shared_from_this() const Compilation failed when shared_from_this() was called on a const object. Signed-off-by: Avi Kivity --- core/shared_ptr.hh | 2 +- tests/shared_ptr_test.cc | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/shared_ptr.hh b/core/shared_ptr.hh index b474325b90..9e47c1c0d4 100644 --- a/core/shared_ptr.hh +++ b/core/shared_ptr.hh @@ -291,7 +291,7 @@ template inline lw_shared_ptr enable_lw_shared_from_this::shared_from_this() const { - return lw_shared_ptr(this); + return lw_shared_ptr(const_cast(this)); } template diff --git a/tests/shared_ptr_test.cc b/tests/shared_ptr_test.cc index 6b3dc3316a..21e8a814bf 100644 --- a/tests/shared_ptr_test.cc +++ b/tests/shared_ptr_test.cc @@ -82,3 +82,14 @@ BOOST_AUTO_TEST_CASE(test_lw_const_ptr_2) { lw_shared_ptr pe3 = pe2; BOOST_REQUIRE(pe2 == pe3); } + +struct F : enable_lw_shared_from_this { + auto const_method() const { + return shared_from_this(); + } +}; + +BOOST_AUTO_TEST_CASE(test_shared_from_this_called_on_const_object) { + auto ptr = make_lw_shared(); + ptr->const_method(); +}