https://github.com/acplt/rte/blob/e1a01f5e6d0a7e7cf4daa402dc27f29e4db47665/core/ov/include/libov/ov_macros.h#L352
This check fails in some valid cases and works in some invalid cases.
Given the inheritance structure:
ov_object <-- ov_domain <-- fb_object <-- fb_task
Creating an fb_object object while supplying an ov_domain pointer ist valid (since fb_object can be cast to ov_domain) but will cause a compiler error.
Creating an fb_object object while supplying an fb_task pointer in invalid (since fb_object cannot be cast to fb_task) but will not trigger a compiler error.
Any idea why this check was implemented and why it is not used for Unix systems?