
7 Jan
2007
7 Jan
'07
9:51 p.m.
Server Levent Yilmaz wrote:
// A function object generator. // It returns a functor which in turn returns some // double member of A accessed via address offset boost::function
getmem ( const A* obj, const double* mem ) { ptrdiff_t shift = mem - reinterpret_cast (obj); using namespace boost::lambda; return *(ll_reinterpret_cast (&_1) + constant(shift) ); }
This definitely sounds like a compiler bug. But your code isn't quite
standard-conforming. You ought to use a pointer to member, not
reinterpret_cast tricks.
boost::function
int main() { A obj; obj.a = 1.; obj.b = 2.; // foo( getmem(&obj, &obj.b), obj );
foo( getmem( &A::b ), obj );
}