https://issues.dlang.org/show_bug.cgi?id=23556
Issue ID: 23556
Summary: Array append ignores copy constructor
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: druntime
Assignee: [email protected]
Reporter: [email protected]
As of DMD 2.101.0, the following program compiles and runs successfully to
completion:
---
struct S
{
this(ref S)
{
assert(0);
}
}
void main()
{
S[] a = [ S() ];
auto p = a.ptr;
// append until reallocation
while (a.ptr == p)
a ~= S(); // no assert
}
---
This program should assert at runtime when the array is reallocated, but does
not, because the copy constructors of the array's elements are not called.
If the copy constructor is changed to a postblit (`this(this)`), the program
asserts at runtime, as expected.
See also issue 20879, which affected .dup and .idup.
--