请问下面代码编译器的处理过程是怎样的,详见代码
template<typename B, typename D>
class is_base_and_derived {
private:
template<typename T>
static int judge(D const *, T);
static char judge(B const *, int);
struct host {
operator D const * () ;
operator B const * () const ;
};
public:
enum { value = (is_same<B, D>::value || sizeof(int) == sizeof(judge(host(), 0))) };
};