cppfront
cppfront copied to clipboard
[FIX] is() function to handle polymorphic sidecast
The current implementation is not handling sidecasts.
The code:
struct B1 { virtual ~B1() = default; };
struct B2 { virtual ~B2() = default; };
struct D : B1, B2 {};
main: () -> int = {
d: D = ();
p: * B1 = d&;
std::cout << p* is B2 << std::endl;
}
returns false
- the current implementation of is()
function is using std::is_base_of
that blocks using dynamic_cast
for sidecast. The current fix removes the requirement for B2
being a base for B1
.
This PR close is()
part of the https://github.com/hsutter/cppfront/issues/127
as()
will be fixed after finalizing discussion here: https://github.com/hsutter/cppfront/pull/106 (it requires handling case when dynamic_cast
will return nullptr
or throw bad_cast
).