Здравствуйте, sergey_shandar, Вы писали:
спасибо за перевод, а то я бы сам не догадался
попробую еще разик ....
вот это — стандартное поведение компилятора, которое и описывает твоя выдержка из стандарта
<псевдокод>
C(const C&)
{
B(operator B(C)) — конструирование базового класса с применением неявного приведения типа
С(С) — конструирование инстанцируемого класса
}
operator B(const C&) — оператор приведения типа
так и происходит в твоем примере при отсутствии конструктора B(C). но введя его ты сам, добровольно, меняешь логику принятую по умолчанию, т.к. в дело вступает другая строка стандарта (искать не буду) о применении неявного приведения типа. и эта строка стандарта явно запрещает это приведение в слуае если определена функция с точной сигнатурой. что и происходит в твоем случае.