|
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