Bug in VC++7.0/6.0 - template copy constructor?
От: Артур Россия  
Дата: 02.02.04 13:01
Оценка:
Вот такой маленький код:

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 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.