More correct casting

[SVN r78588]
This commit is contained in:
Ion Gaztañaga
2012-05-24 15:50:45 +00:00
parent ad82973cc5
commit 27a8cf203e

View File

@@ -47,13 +47,25 @@ inline std::ptrdiff_t offset_from_pointer_to_member(const Member Parent::* ptr_t
template<class Parent, class Member>
inline Parent *parent_from_member(Member *member, const Member Parent::* ptr_to_member)
{
return (Parent*)((char*)member - offset_from_pointer_to_member(ptr_to_member));
return static_cast<Parent*>
(
static_cast<void*>
(
static_cast<char*>(static_cast<void*>(member)) - offset_from_pointer_to_member(ptr_to_member)
)
);
}
template<class Parent, class 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));
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)
)
);
}
} //namespace detail {