On 6/21/22 10:40 AM, Antonio wrote:
I'm using explicitly destroy!false(obj) for a "deterministic" resources release.

I replicate the c# "using" pattern, or the python "with" pattern with my own "use" template supposing object are RAII

i.e.:

```d
Item[] items = query("...").use( (Answer a) =>
   a.rangify.map!(rowToItem).array()
);

```

The problem:

"use" can't be @safe because it contains a call to "destroy".

For better understanding of the idea, I include the "use" template code

```d
R use(R, T)(T obj, R delegate(T) fT)
{
   scope (exit)
     destroy!false(obj);

   return fT(obj);
}
```

What's the way to ensure @safe using destroy? (if possible)

destroy is @safe if the destructor is @safe.

But your `use` function is being inferred as @system. Why it's being inferred is likely not the destroy call (or maybe it's not the only problem). You delegate doesn't seem to be marked @safe as well.

To find the problems, mark `use` as @safe, and see what it says.

-Steve

Reply via email to