digitalmars.D.bugs - [Issue 22135] New: Spurious "has scoped destruction, cannot build
- d-bugmail puremagic.com (53/53) Jul 22 2021 https://issues.dlang.org/show_bug.cgi?id=22135
https://issues.dlang.org/show_bug.cgi?id=22135 Issue ID: 22135 Summary: Spurious "has scoped destruction, cannot build closure" on mixing closures, tuples and destructor Product: D Version: D2 Hardware: All OS: All Status: NEW Keywords: industry Severity: major Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: pro.mathias.lang gmail.com See the following code example: ```D // Need something with a destructor struct S { ~this () {} } // Need a tuple (??) alias AliasSeq(T...) = T; // Need to return a nested function alias DG = void delegate (); DG func() { Server inst; // Providing `-version=NoTuple` makes the error go away // So does providing `-version=NoDirectCall`. version (NoTuple) alias PTypes = S; else alias PTypes = AliasSeq!(S); void handler() { // Error: variable `func.handler.__params_field_0` has scoped destruction, cannot build closure PTypes params; version (NoDirectCall) inst.foo(params); else () trusted { inst.foo(params); } (); } return &handler; } struct Server { void foo (S param) {} // Can be `ref` too, no difference } void main () { auto dg = func(); } ``` As mentioned, compiling with either `-version` makes the error go away. --
Jul 22 2021