http://d.puremagic.com/issues/show_bug.cgi?id=10929
Summary: [CTFE] Destructor errornously gets called on NRVO-ed
structs?
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: critical
Priority: P2
Component: DMD
AssignedTo: [email protected]
ReportedBy: [email protected]
--- Comment #0 from Dmitry Olshansky <[email protected]> 2013-08-30
11:33:52 PDT ---
If CTFE did full copy with postblit and dtor-ed temporary it would be more or
less OK.. but instead it seemingly moves struct but calls dtor.
(this bug blocks development of std.regex, marking as critical)
Test case shows difference between R-T and C-T:
struct Destroyable{
this(this)
{
postblitCount++;
}
~this(){
payload = 0;
dtorCount++;
}
int payload;
int dtorCount;
int postblitCount;
}
auto make()
{
auto val = Destroyable(42, 0);
return val;
}
enum dg = (){
auto val = make();
assert(val.postblitCount == 0); //passes in both modes
assert(val.dtorCount == 1); //passes at CT -- WAT?
//at R-T the above assertion fails as expected
return 0;
};
enum test_me = dg();
int main(){
return dg();
};
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------