Si hago¿Cómo puedo detectar si un tipo es una base visible de otro tipo?
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;
}
me sale un 1. Me gustaría conseguir un 0 cuando C
es una A
privada, y un 1 cuando C
es un público A
.
[el código se deriva de How does `is_base_of` work?]
Un poco fuera de tema, pero ¿puede realmente ofrecer una recompensa de X si su reputación es menor que X? –
Eliminé mi respuesta que dice básicamente "no puedo" con plantillas y una alternativa a las plantillas que podrían hacerlo. –