Boost logo

Boost :

From: Rani Sharoni (rani_sharoni_at_[hidden])
Date: 2003-01-28 12:16:45


"David Abrahams" <dave_at_[hidden]> wrote in message
news:u3cndjmu6.fsf_at_boost-consulting.com...
> "John Maddock" <jm_at_[hidden]> 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


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk