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

Reply via email to