Tuesday, May 22, 2012

How can I detect whether a type is a visible base of another type?

If I do



struct A{};
struct C:private A{};

typedef char (&yes)[1];
typedef char (&no)[2];

template <typename B, typename D>
struct Host
{
operator B*() const;
operator D*();
};

template <typename B, typename D>
struct is_base_of
{
template <typename T>
static yes check(D*, T);
static no check(B*, int);

static const bool value = sizeof(check(Host<B,D>(), int())) == sizeof(yes);
};

int main(){
std::cout<<is_base_of<A,C>::value<<std::endl;
}


I get a 1. I would like to get a 0 when C is a private A, and a 1 when C is a public A



[the code is derived from How `is_base_of` works? ]





No comments:

Post a Comment