inline const Parent *parent_from_member(const Member *member, const Member Parent::*ptr_to_member) { return static_cast<const Parent *>(static_cast<const void *>( static_cast<const char *>(static_cast<const void *>(member)) - offset_from_pointer_to_member(ptr_to_member))); }
inline const Parent *parent_from_member(const Member *member, const Member Parent::* ptr_to_member) { return (const Parent*)((const char*)member - offset_from_pointer_to_member(ptr_to_member)); }