"David Abrahams" <[EMAIL PROTECTED]> wrote in message [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... > [...] > Borland is particularly strange about layout.
Suprisingly enough, BCB 5 has maintained the optimal size throughout all the changes. > [...] > Whaaa? A temporary that never gets created? Well, I'll show you the code, and you tell me if it gets optimized away or not: // Inherit first template <class T1, class T2> class optimal_parents1 : public T1 { // ... template <class U1, class U2> optimal_parents1(optimal_parents1<U1, U2> const& rhs) : T1(static_cast<U1 const&>(rhs)) { U2 u2; T2 t2(u2); } // Here // ... }; If T2(U2 const&) is empty, I would think that it wouldn't bother to call it in the first place. Am I missing something? Maybe I shouldn't have called t2 a temporary, since it is an lvalue. I just meant that it's not really used for anything other than making sure that U2 can be converted to T2. > [...] > Maybe you should illustrate what you mean, 'cause I'm lost. assert_check(no_check const&) { } This allows you to create a pointer with stricter checking from a pointer with no checking. But no_check has no such conversion c'tors, because presumably, one does not want to *reduce* the level of checking. Since the checking policies generally don't have any state, the c'tors are all trivial, and hopefully, will get optimized out of existence. They merely serve as a compile-time check of compatibility. > [...] > I don't think I can do any better than you. I have the same tools at > my disposal. I'd do a bunch of experiments and look at the > resulting class layouts by checking the size and the relative addresses > of members. I was afraid it was going to come down to that. > [...] > You could probably figure out the VC++ algorithm by > experimentation, but that still wouldn't help a user trying to write > portable, efficient code, unless you find a workaround for every > other compiler. Yeah, that's the problem. :( Even more disturbingly, it's not clear if this is just an MI problem, or a problem with inheritance in general with VC++. I mean, when I tried the chained policy implementation, it did provide the right size, but that doesn't mean it won't change if I update the implementation (and that version would require a lot of changes to get it up to speed with the MI version). Dave _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost