"David Abrahams" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> "John Maddock" <[EMAIL PROTECTED]> writes:
> > Yes, a class is it's own superclass/subclass, but IMO not it's own
> > base: so it is a bug in the implementation.
>
> I'd like to suggest changing the documentation to match the
> implementation at this point.  I know of a few places where I have
> relied on the current semantics, and I'm sure that's the case for
> others as well.  I'm not set on this course, but I think it's worth
> considering.

Before changing the documentation please consider the following improved
implemetation that overcomes ambiguity and access control issues of the
current is_base_and_derived implemetation (I lately posted it to c.l.c++.m)
:

template <typename B, typename D>
struct is_base_and_derived
{
private:
    typedef char (&yes)[1];
    typedef char (&no) [2];

    template<typename T>
    static yes check(D const volatile &, T);
    static no  check(B const volatile &, int);

    struct C
    {
        operator B const volatile &() const;
        operator D const volatile &();
    };

    static C getC();
public:
    static const bool result =
        sizeof(check(getC(), 0)) == sizeof(yes);
};

Additional specializations needed (e.g. void and reference types)

Cheers,
Rani



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to