From: "Gennaro Prota" <[EMAIL PROTECTED]> > On Sat, 1 Feb 2003 20:01:15 -0800, "Eric Niebler" <[EMAIL PROTECTED]> > wrote: > > >"Gennaro Prota" <[EMAIL PROTECTED]> wrote > >> > >> Well, then I imagine you would prefer the old semantics. Was there > >> anybody complaining that being not enough? > >> > > > >Yes, I was. A while back, I pointed out to Rani that is_base_and_derived > >was insufficient to implement is_com_ptr, a trait I needed. In COM > >programming, every interface inherits from IUnknown, and many COM objects > >implement multiple interfaces. So is_base_and_derived<IUnknown, > >MyCOMObject> was almost always ambiguous. > > > >I was content to gripe, but Rani actually did something about it. The new > >behavior of is_base_and_derived is very welcome, IMO. > > Yes, Rani pointed out the usage for COM interfaces too, and that's a > good one. I'm only a little perplexed about inaccessible bases, > because the relevant example looks a little artificial; that doesn't > mean that there aren't better examples, or that it is a good example > but I have not understood it. As I said in another post, let's see how > will this behave in practice. After all, boost is (also) a sort of > test-bed for C++ libraries.
I think I have a use case for the new behavior. When is_base_and_derived<B, D> says true, this means that every object of type D has a subobject of type B. This can be used to determine the order of if statements in the code below: if(dynamic_cast<D*>(p)) { // ... } else if(dynamic_cast<B*>(p)) { // ... } Modern C++ Design has an example of that. The corrolaries are: 1. is_base_and_derived<X, X> must be false, or the predicate won't be antireflexive and mpl::sort won't work. 2. mpl::sort must work with a partial ordering predicate. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost