June 14, 2019
void foo()
{
   void bar() { foo; }
   switch
       case: scope(exit) { do }  break

   bar;

}

fails to execute do


void foo()
{
   void bar() { foo; }
   switch
       case: bar; do return;

   bar;
}

does work... yet there is no difference except the scope exit.

In my code it is if do is never executed...

I used it to avoid having to write bar twice or use a flag but it's not working... I see no reason why it should not work. scope(exit) is suppose to execute the block at the end of the function call, right?







June 14, 2019
On Friday, 14 June 2019 at 05:35:05 UTC, Amex wrote:
> I used it to avoid having to write bar twice or use a flag but it's not working... I see no reason why it should not work. scope(exit) is suppose to execute the block at the end of the function call, right?

No, a scope guard executes at the end of the scope. The spec[1] has a
few examples (with output).

[1] https://dlang.org/spec/statement.html#scope-guard-statement