Allow get_rcp() to be called on a const reference

This commit is contained in:
Josh Holtrop 2026-02-25 08:25:03 -05:00
parent 0de327d442
commit 7d5316bd79
2 changed files with 13 additions and 2 deletions

View File

@ -297,9 +297,9 @@ rcp<T> rcp_dynamic_cast(rcp<U> && other)
#define rcp_managed(classname) \ #define rcp_managed(classname) \
public: \ public: \
rcp<classname> get_rcp() \ rcp<classname> get_rcp() const \
{ \ { \
return rcp<classname>(this); \ return rcp<classname>(const_cast<classname *>(this)); \
} \ } \
template <typename... Args> \ template <typename... Args> \
static rcp<classname> create(Args&&... args) \ static rcp<classname> create(Args&&... args) \

View File

@ -114,6 +114,16 @@ struct Receiver
} }
}; };
void test_get_rcp_const()
{
auto a = MyObj::create();
const MyObj & ref = *a;
rcp<MyObj> b = ref.get_rcp();
assert(b);
assert(b->v == 42);
assert(b.use_count() == 2);
}
void test_multi_construct_from_raw_pointers() void test_multi_construct_from_raw_pointers()
{ {
Receiver r; Receiver r;
@ -423,6 +433,7 @@ int main(int argc, char * argv[])
test_dereference(); test_dereference();
test_booleans(); test_booleans();
test_create(); test_create();
test_get_rcp_const();
test_multi_construct_from_raw_pointers(); test_multi_construct_from_raw_pointers();
test_listener_self_registration(); test_listener_self_registration();
test_copy_assignment_decrements_previous_reference(); test_copy_assignment_decrements_previous_reference();