On Saturday, 7 July 2018 at 19:29:02 UTC, Adam D. Ruppe wrote:
On Saturday, 7 July 2018 at 18:48:35 UTC, Mr.Bingo wrote:
The enums are local in nature and are used to store intermediate results but the looping tries to redefine them, which gives an error.

Have you tried putting a second set of {} around it?

static foreach(...)
{{ // 2 intentional
   enum y = whatever;
}} // 2 intentional


?

This doesn't always work as it conflates compile time scope and runtime scope.

For example, suppose you want to create a series of runtime variables:

static foreach(k,...)
{{
    mixin("auto x"~k~" = ...");
}}

You want xk's to escape the foreach but they don't because of the inner {}.

You can't move it out and expect things to work:

static foreach(k,...)
{{
    {
        enum y = 3;
    }
    mixin("auto x"~k~" = y");
}

better to achieve a proper solution that works in general.

One doesn't want to write code then later have to modify it and then realize it can't be modified properly because of the lack of straight forward principles.

Reply via email to