Giving Array an opApply operator fixes both problems:

1) It allows modifying the elements when accessed with "ref".
2) It allows writing "++a" even though "++front" isn't supported.

I implemented this and made a pull request:
https://github.com/D-Programming-Language/phobos/pull/683

I implemented both opApply and opApplyReverse.
I implemented it both for Array.Range and Array (see: http://forum.dlang.org/thread/rxpbtrawpjzvdfuuw...@forum.dlang.org)
I implemented correct behavior for "break" cases.
I documented the public opApply.
I wrote a complete unit test.
I tested && unittested it.

This is my first time doing this, so please forgive me if I did something wrong :(

----
If this gets validated, then maybe the same should be done to the other containers? AFAIK, none of them work correctly with foreach(ref).

----
Note that i did not touch Array!bool. This is because in that case, I cannot, even internally, pass a bool by reference to the delegate.

A workaround would be to read a bool into a temporary, pass temporary to the delegate, write back to container. However, I do not know how to distinguish the case where the delegate modifies the bool or not, making the general case too expensive.

I preferred not touching it, and doing things one at a time.
----

Thank you all for the time you have already invested in this thread (as well as the others...)

Reply via email to