Почему оператор приведения типов не работает с унаследованным классом?

У меня два класса:

struct B {};
struct D {
  operator B& ();
};

Когда я делаю;

b = d; // B b; ... D d;

Результат соответствует ожиданиям, где вызывается D :: operator B & () ( Демо ).

Если D изменить на,

struct D : B {
  operator B& ();
};

, то D :: оператор B & () не вызывается ( Демо ). B :: B (const B &) находит лучшего кандидата в D , а затем D :: operator B & () ?

5
задан skaffman 27 July 2011 в 20:15
поделиться