static foreach considered

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 8 15:41:51 PDT 2015


On 06/09/2015 12:36 AM, Tofu Ninja wrote:
> On Monday, 8 June 2015 at 22:12:06 UTC, Idan Arye wrote:
>> On Monday, 8 June 2015 at 21:32:52 UTC, Timon Gehr wrote:
>>> I think the body should have access to a scope that is hidden from
>>> the outside which contains the loop variable, but declarations should
>>> be inserted into the enclosing scope like for static if.
>>
>> This would require some syntax to mark the declarations we want to
>> expose. Maybe `out`?
>>
>> This is far better than the mixin template approach, since it'll alert
>> us early about conflicts:
>>
>>     static foreach (ident; ["a", "b", "a"])
>>     {
>>         int mixin(ident ~ "1");
>>         out int mixin(ident ~ "2");
>>     }
>>
>> `a1` is created twice, but that's OK since it isn't marked with `out`.
>> `a2` is declared twice and raises a compilation error because it's
>> marked with `out`. This will ensure these kind of errors are detected
>> early and the compilation error points to the exact place of declaration.
>
> I think it would make more sense to behave similar to how static if
> currently does.

No, static if should be fixed, and then it should behave similarly to 
the fixed version:

void main(){
     static if(is(int T==int)){}
     T x; // wtf?
}



More information about the Digitalmars-d mailing list