[Bug c++/77274] New: GCC uses copy constructor in member initializer list instead of simple initialization
yanp.bugz at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Aug 16 20:49:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77274
Bug ID: 77274
Summary: GCC uses copy constructor in member initializer list
instead of simple initialization
Product: gcc
Version: 5.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: yanp.bugz at gmail dot com
Target Milestone: ---
Code example:
struct C{
static int count;
C(int, int) {count++;}
};
#define BUG
struct C1{
static int count;
explicit C1() {count++;}
C1(const C1& )
#ifdef BUG
= delete;
#else
{
cout<<"copy ctor\n";
count++;
}
C1(C1&& ) {
cout<<"move ctor\n";
count++;
}
#endif
};
struct D{
D() : c(C(2,3)), cc(3,4) c1(C1()) {}
C c, cc;
C1 c1;
};
Compiler gives you error:
new.cxx: In constructor ‘D::D()’:
new.cxx:79:35: error: use of deleted function ‘C1::C1(const C1&)’
D() : c(C(2,3)), cc(3,4), c1(C1()) {}
^
new.cxx:63:2: note: declared here
C1(const C1& )
^
However if you undef BUG you will notice that none of copy/move ctors were
called
More information about the Gcc-bugs
mailing list