Здравствуйте, sergey_shandar, Вы писали:
Определение типа B:
struct C;
struct B
{
B() {}
B(const B &) { std::cout << "copy constructor" << std::endl; }
B(const C &) { std::cout << "[cencored] constructor" << std::endl; }
};
--
ПК
_>Тип C, третий случай:
_>_>struct C: B {};
_>
_>Вывод GCC 3.3.1, IMHO, правильно:
_>_>copy constructor
_>
_>Вывод VC 7.1, IMHO, неправильно, бред какой то:
1. а не бред объявит в базовом классе конструктор, принимающий на вход экземпляр производного класса ?
2. компилятор естественно вызывает конструктор B(C), т.к. ему в этом случае не нужно преобразования типа (т.е. его поведение вполне соответствует стандарту), а если хочется другого (не стандартного)поведения, то сделай сам явное преобразование (твой пример выше это и демонстрирует). а вот поведение GCC мягко говоря некоректно.