Hi,

with the unit test added by Stefan it is pretty good reproducable with
VS2008/2010 and 32bit at least on my machine. The compiler actually
throws a warning that there might be something fishy:

http://msdn.microsoft.com/en-us/library/1s6193tt(v=vs.80).aspx

As I did not see this warning ever in my life, I just started
investigating what's the deal with that. Basically, it's a problem of
member function pointers used within (multiple) inheritances. As there
is no proper support for member functions pointers being a real C++
feature like a delegate in other languages, it's up to the compiler to
deal with that. It even gets more complicated if virtual functions or
virtual inheritance is involved...
For further reading:
http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/05a59a5f-1370-418f-9460-e4dd49d19ddf/
http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

 So it's up to the compiler vendors to handle this issue
appropriately. Of course, Microsoft has some "solutions" for this:

http://msdn.microsoft.com/en-us/library/ck561bfk%28VS.80%29.aspx

Imo, this not really practical, so the only portable solution is
reordering the interheritance, meaning the base class used for the
function binding (aka dispatcher in this case) has to be very first. A
remaining question on this is what gcc for instance is doing about
this whole issue?

A solution on the library side would be thinking about using something
similar like boost.function, which from what I read so far should have
no problem with this particular problem, as boost.bind used for
creating the actual binding is due its implementation aware of the
complete class hierarchy.

Cheers,
Daniel

_______________________________________________
eq-dev mailing list
[email protected]
http://www.equalizergraphics.com/cgi-bin/mailman/listinfo/eq-dev
http://www.equalizergraphics.com

Reply via email to