http://d.puremagic.com/issues/show_bug.cgi?id=8563
--- Comment #5 from Nils <nilsboss...@googlemail.com> 2013-06-26 19:09:12 PDT --- Some observations (includes the stuff form issue 10475): struct DirIterator { int _store = 42; this(string dummy) {throw new Exception("constructor");} ~this() { assert(_store == 42, "destructing garbage"); assert(false, "destructor"); } } DirIterator dirEntries() {return DirIterator("");} void main() { /* This triggers only "constructor". The destructor is not called. */ version(A) DirIterator a = dirEntries(); /* This triggers "constructor" and "destructing garbage". I.e. destructor is called on uninitialized data. Probably fine in this case because of explicit void initialization. */ else version(B) { DirIterator b = void; b = dirEntries(); } /* This triggers "constructor" and "destructor". Arguably, the destructor should not be called, since construction has failed. */ else version(C) for(DirIterator c = DirIterator(""); true; ) {} /* Just like B, this triggers "constructor" and "destructing garbage". No explicit void initialization here, so that should not happen. */ else version(D) for(DirIterator c = dirEntries(); true;) {} else static assert(false); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------