On Wednesday, 18 December 2024 at 22:16:45 UTC, John Dougan wrote:
As the subject. The obvious way:
I want the `scope exit 2` to come after the `F`. Is there a way to tell it that I want to use an enclosing scope or make it ignore the scope on the `if`?

Cheers,
  -- John

This code can make "scope exit 2" be output at the end.

```d
import core.stdc.stdio;
import std;

enum exitcb = `scope void delegate() exitcb;
scope(exit) if(exitcb) exitcb();`;

int test(int val)
{
    mixin (exitcb);

    writeln("A");
    if (val % 2 == 0)
    {
        writeln("b");
        scope (exit)
           exitcb = { writeln("scope exit ", val); };
        writeln("c");
    }
    writeln("F");
    return 2 * val;
}

void main()
{
    writeln("== start =========================");
    int v1 = test(1);
    writeln("== 2 ==============================");
    int v2 = test(2);
    writeln("== end ===========================");
}
```

Reply via email to