¿Cómo funciona `is_base_of`?

¿Cómo funciona el siguiente código?

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);
};

//Test sample
class Base {};
class Derived : private Base {};

//Expression is true.
int test[is_base_of<Base,Derived>::value && !is_base_of<Derived,Base>::value];

Tenga en cuenta queB Es base privada. ¿Como funciona esto?

Tenga en cuenta queoperator B*() es constante ¿Por qué es importante?

Por que estemplate<typename T> static yes check(D*, T); mejor questatic yes check(B*, int); ?

Nota: Es una versión reducida (se eliminan las macros) deboost::is_base_of. Y esto funciona en una amplia gama de compiladores.

Respuestas a la pregunta(5)

Su respuesta a la pregunta