I would like to get the offset of a standard layout member variable when provided with a poiner to that variable. I cannot use offsetof
since I have a pointer and n
So how about:
template
struct {
ptrdiff_t get_offset( int (T::*mem) )
{
return
( &reinterpret_cast(
reinterpret_cast( 1 )->*mem )
- reinterpret_cast( 1 ) );
}
};
..?
This avoids both using a dummy AND dereferencing null. It works on all the compilers I've tried. The cast to char reference and then take the address (rather than take the address and then cast to char pointer) may seem unusual but it avoids a warning/error on some compilers.