On Monday, 16 November 2015 at 18:18:51 UTC, Chris wrote:
On Monday, 16 November 2015 at 17:57:53 UTC, opla wrote:
On Monday, 16 November 2015 at 16:55:29 UTC, Chris wrote:
On Monday, 16 November 2015 at 16:49:19 UTC, Marc Schütz wrote:
On Monday, 16 November 2015 at 16:44:27 UTC, Chris wrote:
Updating my code from 2.067.1 to 2.069.1 (I skipped 2.068, because I was too busy).

I get this error:

invalid foreach aggregate, define opApply(), range primitives, or use .tupleof

for code like

foreach (ref it; myArray.doSomething) {}

Probably not the best idea anyway. What's the best fix for this? Thanks.

Well, what does `doSomething` return?

It returns a range that modifies individual items in myArray, i.e. it assigns values to fields in each item of the array.

have you...

tried without ref
tried by adding a pair of parens after doSomething ?
tried std.algorithm.each or map on doSomething ?
checked the primitives ?
checked that isInputRange!(ReturnType!doSomething) == true?

I think ref is necessary, else the items are not changed. I will try the other options tomorrow (Tuesday). Thanks.

I wonder was the change overdue (and I got away with it till 2.068.1) or is it a new policy due to changes in D?

That really depends on the details, that's why I asked. It could be a regression, or it could be that the compiler now does stricter checking than before, and your implementation wasn't completely correct, or it could be a bug in Phobos if you use that to create the range.

If you can post a minimal example that works in 2.067.1, but doesn't with the current version, I can try to find the change that broke it.

Reply via email to