www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 13661] New: static array init does not call destructors

https://issues.dlang.org/show_bug.cgi?id=13661

          Issue ID: 13661
           Summary: static array init does not call destructors
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: DMD
          Assignee: nobody puremagic.com
          Reporter: shachar shemesh.biz

Please consider the following program:

import std.stdio;

struct S {
    int x;

    this(this) {
        writeln("this(this)");
    }

    ~this() {
        writeln("~this()", &this, " ", x);
    }

    ref auto opAssign(T)(T arg) {
        x = arg.x;
        writeln("opAssign ", T.stringof, " x=", x);
        return this;
    }
}

void main() {
    S[2] a;
    S[2] b;

    a[0].x = 12;
    a[1].x = 17;

    // a = b;           // 1
     a = a.init;      // 2
    // a[] = S.init;    // 3

    writeln("end a=", a[0].x, ", ", a[1].x);
}

At no point is a destructor called for x=12 or x=17. No opAssign is called at
all.

Replacing the line marked "2" with either "1" or "3" works just fine.

This is a major blocker for implementing RAII type resource management.

--
Oct 27 2014