Вот такой маленький код:
struct Base
{
Base() {}
template <class T> Base(const T& e)
{
std::cout<<"Base template copy constructor"<<std::endl;
}
virtual ~Base(){}//если убрать эту строчку, то всё ОК
};
struct Derived : public Base
{
};
int main(int argc, char* argv[])
{
Derived c;
Derived c1(c);
return 0;
}
Выводит "Base template copy constructor", хотя не должен. Если закомментить виртуальный деструктор у Base — то всё ок (достаточно даже просто сделать его невиртуальным)
По идее у класса Derived и у класса Base должны сгенерироваться конструкторы копирования по умолчанию, при этом конструктор копирования Derived вызывет конструктор копирования Base.
Но вместо этого, VC++ 7.0 сгенерировал конструктор копирования Derived, который вызывает
шаблонный контсруктор преобразования у Base.
Никто не сталкивался? Может можно обойти?
... << RSDN@Home 1.1.0 stable >>