Компиляторы MS VC++ на такой вот код:
struct Base {
int a;
int b;
};
struct Derived : public Base {
Derived (Base const B) { *this = B; }
};
Derived f (Base const B) {
return B;
}
стабильно жалуются на то, что конструктор Derived получается рекурсивным за счет того, что для преобразования Base к Derived используется он же.
Это особенность компиляторов MS, или оно везде так?
Если бы данных в классе было много, можно было бы копировать через приведение указателей, но структуры до 64 разрядов укладываются в "интегральный тип", хорошо обрабатываются в константных выражениях, и без проблем передаются на регистрах.
Можно ли как-то заставить компилятор приводить типы совсем тупо? Ни reinterpret_cast, ни function-style cast, ни C-style cast не помогают.
Знаю, что можно включить Base в Derived вместо наследования, и наделать операторов преобразования, но хотелось бы именно с наследованием.