From mboxrd@z Thu Jan 1 00:00:00 1970 From: scisim@astro.estec.esa.nl To: gcc-gnats@gcc.gnu.org Subject: c++/3894: Template derived from virtual base cannot work with std::vector Date: Tue, 31 Jul 2001 04:56:00 -0000 Message-id: <20010731115125.12757.qmail@sourceware.cygnus.com> X-SW-Source: 2001-07/msg00815.html List-Id: >Number: 3894 >Category: c++ >Synopsis: Template derived from virtual base cannot work with std::vector >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Jul 31 04:56:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: SciSim >Release: gcc version 2.95.4 20010319 (Debian prerelease) >Organization: >Environment: # default >Description: Cannot find copy constructor of derived class, if derived class is a template and its base class it virtual. >How-To-Repeat: $ cat > Duck.cc #include #include class Duck { public: Duck() { std::cout<<"Constructing a duck\n"; } Duck(const Duck& rhs) { std::cout << "Copy constructing a duck\n"; } virtual ~Duck(){} }; template class UncleDagobert : public virtual Duck { public: UncleDagobert() : Duck() { std::cout<<"Constructing a rich duck\n"; } UncleDagobert(const UncleDagobert &rhs) : Duck(rhs) { std::cout<<"Copy-constructing a rich duck\n"; } UncleDagobert& operator=(const UncleDagobert& rhs) {} virtual ~UncleDagobert(){} }; int main() { UncleDagobert o; UncleDagobert oo(o); std::vector > v; v.push_back(o); v.push_back(oo); } $ g++ Duck.cc /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_vector.h: In method `void vector,allocator > >::_M_insert_aux(UncleDagobert *, const UncleDagobert &)': /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_vector.h:325: instantiated from here /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_vector.h:593: no matching function for call to `UncleDagobert::UncleDagobert (const UncleDagobert &)' Duck.cc:21: candidates are: UncleDagobert::UncleDagobert() $ >Fix: class UncleDagobert : public Duck >Release-Note: >Audit-Trail: >Unformatted: