
On Feb 12, 2010, at 6:53 AM, John Maddock wrote:
What do you think? Any potential problems / side effects?
Unfortunately it breaks the existing tests with all the gcc versions I tried (win32 and Linux) :-(
Are we looking at the same code? Have you been able to verify the padding problem? Do your tests at least confirm that my "patch" works for the test case I outlined? My patch seems to work (for my test case) for both Mac OS X and debian linux. gcc 4.2.1 and 4.3.2 respectively. What test case is it failing? Here are the full set of tests I ran on linux with my "hacked" version of is_virtual_base #include <stdio.h> #include "is_virtual_base_of.hpp" #include <stdint.h> struct A { int x; }; struct B { int y; }; struct C : public A, public B { int z; }; struct D : public A, virtual public B { int z; }; struct E : public A, public B { virtual void test(){}; int z; }; struct F : virtual public B { virtual void test(){}; int z; }; struct G : public B, public A { virtual void test(){}; int t; }; struct H : public B, public A { int t; }; struct I : virtual public B { int t; }; struct J : public B { int t; }; int main( int argc, char** argv ) { printf( "A,C %d\n", (int)boost::is_virtual_base_of<A,C>::value ); printf( "B,C %d\n", (int)boost::is_virtual_base_of<B,C>::value ); printf( "A,D %d\n", (int)boost::is_virtual_base_of<A,D>::value ); printf( "virtual B,D %d\n", (int)boost::is_virtual_base_of<B,D>::value ); printf( "A,E %d\n", (int)boost::is_virtual_base_of<A,E>::value ); printf( "B,E %d\n", (int)boost::is_virtual_base_of<B,E>::value ); printf( "virtual B,F %d\n", (int)boost::is_virtual_base_of<B,F>::value ); printf( "B,G %d\n", (int)boost::is_virtual_base_of<B,G>::value ); printf( "A,G %d\n", (int)boost::is_virtual_base_of<A,G>::value ); printf( "virtual B,I %d\n", (int)boost::is_virtual_base_of<B,I>::value ); printf( "B,J %d\n", (int)boost::is_virtual_base_of<B,J>::value ); } ========================================== A,C 0 B,C 0 A,D 0 virtual B,D 1 A,E 0 B,E 0 virtual B,F 1 B,G 0 A,G 0 virtual B,I 1 B,J 0
John.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost