<div dir="ltr"><div dir="ltr">On Fri, Apr 24, 2020 at 6:40 PM Walter Bright via Digitalmars-d <<a href="mailto:digitalmars-d@puremagic.com">digitalmars-d@puremagic.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 4/24/2020 1:24 AM, Walter Bright wrote:<br>
> On 4/23/2020 11:00 PM, Manu wrote:<br>
>> I guess this is the key case you need to solve for:<br>
>><br>
>>    template T(Args...) {}<br>
>>    T!(Tup)     -> T!(0, 1, 2)<br>
>>    T!(Tup)...  -> T!0, T!1, T!2<br>
>><br>
>> And the parallel expansion disambiguation is also critical:<br>
>>    T!(Tup, Tup2...)...  -> T!(0, 3, 4, 5), T!(1, 3, 4, 5), T!(2, 3, 4, 5)<br>
>><br>
>> If you can solve those, the rest will probably follow.<br>
> <br>
> Fair enough. Though there needs to be a rationale as to why those two particuler <br>
> cases are needed and critical.<br>
<br>
Please keep in mind that the following works today:<br>
<br>
   void foo(int);<br>
<br>
   template tuple(T...) { enum tuple = T; }<br>
<br>
   void test() {<br>
     auto t = tuple!(1, 2, 3);<br>
     static foreach (i, e; t)<br>
         foo(e + i);<br>
   }<br>
<br>
and generates:<br>
<br>
   void test() {<br>
      foo(1); foo(3); foo(5);<br>
   }<br></blockquote><div><br></div><div>static foreach is not an expression, and it's very hard to involve those result calls in some conjunction. Expand that code to || them together... it gets ugly real fast.</div><div>I wouldn't have wasted my time writing this DIP and a reference implementation if static foreach was fine.</div><div><br></div><div>Find instances of `staticMap` in phobos and/or user code, and show how you can replace them with static foreach, then there's something to talk about.</div></div></div>