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 >>
Re: Bug in VC++7.0/6.0 - template copy constructor?
От: Denwer Россия  
Дата: 02.02.04 13:43
Оценка:
Здравствуйте, Артур, Вы писали:

Ха, а 7.1 нормально скомпилял.
Re: Bug in VC++7.0/6.0 - template copy constructor?
От: Lorenzo_LAMAS  
Дата: 02.02.04 14:02
Оценка:
У меня в VC 6.0. если еще и конструктор копий в базовом классе явно определить, то уже никакое шаманство с виртуальным деструктором не спасает.
Of course, the code must be complete enough to compile and link.
Re: Bug in VC++7.0/6.0 - template copy constructor?
От: vdimas Россия  
Дата: 04.02.04 00:02
Оценка:
Здравствуйте, Артур, Вы писали:

А>По идее у класса Derived и у класса Base должны сгенерироваться конструкторы копирования по умолчанию, при этом конструктор копирования Derived вызывет конструктор копирования Base.

А>Но вместо этого, VC++ 7.0 сгенерировал конструктор копирования Derived, который вызывает шаблонный контсруктор преобразования у Base.

А>Никто не сталкивался? Может можно обойти?


в VC6.0, насколько я помню, конструктор копирования надо было объявлять явно, в 7.1 — тоже, что правильно.

Предлагаю признать VC7.0 наиглюкавейшим компилятором, я от него много натерпелся, пока 7.1 не вышел.
Re[2]: Bug in VC++7.0/6.0 - template copy constructor?
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 04.02.04 15:43
Оценка:
Здравствуйте, vdimas, Вы писали:

V>в VC6.0, насколько я помню, конструктор копирования надо было объявлять явно, в 7.1 — тоже, что правильно.


Это как понимать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.