687 const void *vtable = *static_cast <
const void *
const *> (src_ptr);
688 const vtable_prefix *prefix =
689 adjust_pointer <vtable_prefix> (vtable,
690 -offsetof (vtable_prefix, origin));
691 const void *whole_ptr =
692 adjust_pointer <void> (src_ptr, prefix->whole_object);
693 const __class_type_info *whole_type = prefix->whole_type;
694 __class_type_info::__dyncast_result result;
696 whole_type->__do_dyncast (src2dst, __class_type_info::__contained_public,
697 dst_type, whole_ptr, src_type, src_ptr, result);
700 if (contained_public_p (result.dst2src))
702 return const_cast <
void *> (result.dst_ptr);
703 if (contained_public_p (__class_type_info::__sub_kind (result.whole2src & result.whole2dst)))
706 return const_cast <void *> (result.dst_ptr);
707 if (contained_nonvirtual_p (result.whole2src))
712 if (result.dst2src == __class_type_info::__unknown)
713 result.dst2src = dst_type->__find_public_src (src2dst, result.dst_ptr,
715 if (contained_public_p (result.dst2src))
717 return const_cast <
void *> (result.dst_ptr);