[Bug c++/61655] New: Copy constructor not called on CRTP schema

2014-06-30 Thread fabien.picarou...@univ-nantes.fr
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

2014-06-30 Thread fabien.picarou...@univ-nantes.fr
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?