[Bug c++/61655] New: Copy constructor not called on CRTP schema
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61655 Bug ID: 61655 Summary: Copy constructor not called on CRTP schema Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: critical Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: fabien.picarou...@univ-nantes.fr Created attachment 33033 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33033&action=edit Illustration of the problem When using a CRTP pattern on a class and returning an object of this class in a function, the copy constructor is not called. See test attached file that illustrate the problem. Output on gcc 4.9.0 is CBase::CBase() CDerived::CDerived() CBase::CBase() CDerived::CDerived() before test: operator* CBase::CBase() CDerived::CDerived() end operator* CBase::Display() after test: CDerived::~CDerived() CBase::~CBase() CDerived::~CDerived() CBase::~CBase() CDerived::~CDerived() CBase::~CBase() but the expected outpup is CBase::CBase() CDerived::CDerived() CBase::CBase() CDerived::CDerived() before test: operator* CBase::CBase() CDerived::CDerived() end operator* CBase::CBase(const CBase &obj) CDerived::CDerived(const CDerived &obj) CDerived::~CDerived() CBase::~CBase() CBase::Display() after test: CDerived::~CDerived() CBase::~CBase() CDerived::~CDerived() CBase::~CBase() CDerived::~CDerived() CBase::~CBase() This code works fine on MSVC2013 C++ compiler
[Bug c++/61655] Copy constructor not called on CRTP schema
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61655 --- Comment #3 from Fabien Picarougne --- This code is minimal and is just here to illustrate the problem, I use a more complex one to handle generic matrix. But The copy constructor here is not neutral, there is an output on stdout. So I think, the optimization should not take place here, isn't it?