Boost logo

Boost :

From: Markus Schöpflin (markus.schoepflin_at_[hidden])
Date: 2007-10-19 07:30:55


Hello,

by now I have intrusive pass all regression tests locally. There is one
modification left, which I'm not sure off, therefore I would like to ask
for some advice before committing.

All remaining failures are due to the implementation of
offset_from_pointer_to_member():

template<class Parent, class Member>
inline std::size_t offset_from_pointer_to_member(
   const Member Parent::* ptr_to_member)
{
#if ... // 1
   return *(const std::ptrdiff_t*)(void*)&ptr_to_member;
#elif ... // 2
   const Parent * const parent = 0;
   const char *const member =
     reinterpret_cast<const char*>(&(parent->*ptr_to_member));
   return std::size_t(member - reinterpret_cast<const char*>(parent));
#else ... // 3
   return (*(const std::ptrdiff_t*)(void*)&ptr_to_member) - 1;
#endif
}

Currently, variant #3 is chosen, which is obviously wrong. I tried both
variant #1 and #2, and both seem to work for CXX. (All tests pass, no
crashes.) So which variant should I choose?

TIA, Markus


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk