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(); +}