Allow comparing rcp<T> to rcp<U>
This commit is contained in:
parent
11555ded36
commit
69ecab39f2
@ -147,14 +147,16 @@ public:
|
||||
return ptr != nullptr;
|
||||
}
|
||||
|
||||
bool operator==(const rcp & other) const
|
||||
template <typename U>
|
||||
bool operator==(const rcp<U> & other) const
|
||||
{
|
||||
return ptr == other.ptr;
|
||||
return static_cast<const void *>(ptr) == static_cast<const void *>(other.ptr);
|
||||
}
|
||||
|
||||
bool operator!=(const rcp & other) const
|
||||
template <typename U>
|
||||
bool operator!=(const rcp<U> & other) const
|
||||
{
|
||||
return ptr != other.ptr;
|
||||
return static_cast<const void *>(ptr) != static_cast<const void *>(other.ptr);
|
||||
}
|
||||
|
||||
bool operator==(std::nullptr_t) const
|
||||
|
||||
@ -181,6 +181,17 @@ void test_move_assignment_releases_existing()
|
||||
assert(mybase_destruct == destructed_before + 2);
|
||||
}
|
||||
|
||||
void test_cross_type_comparison()
|
||||
{
|
||||
rcp<MyDerived> derived = MyDerived::create(1.5);
|
||||
rcp<MyBase> base = derived;
|
||||
assert(base == derived);
|
||||
assert(!(base != derived));
|
||||
rcp<MyBase> other = MyBase::create(1, 2);
|
||||
assert(base != other);
|
||||
assert(!(base == other));
|
||||
}
|
||||
|
||||
void test_reset()
|
||||
{
|
||||
int destructed_before = mybase_destruct;
|
||||
@ -238,6 +249,7 @@ int main(int argc, char * argv[])
|
||||
test_create();
|
||||
test_multi_construct_from_raw_pointers();
|
||||
test_copy_assignment_decrements_previous_reference();
|
||||
test_cross_type_comparison();
|
||||
test_reset();
|
||||
test_move_constructor();
|
||||
test_move_assignment();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user