On 07/10/2012 12:21 AM, kenji hara wrote:
> There are two problems:
>
> 1. std.container.Array.(front, back, opIndex, ...) doesn't return its
> elements by ref.

It's not that obvious to me. The following picture should supposedly provide references to elements:

The latter of the following pair of Array.Range.front() should be used in the foreach body:

        @property T front()
        {
            enforce(!empty);
            return _outer[_a];
        }

        @property void front(T value)
        {
            enforce(!empty);
            _outer[_a] = move(value);
        }

There, _outer is the Array itself. And Array.opIndexAssign() seems to be doing the right thing:

    void opIndexAssign(T value, size_t i)
    {
        enforce(_data.RefCounted.isInitialized);
        _data._payload[i] = value;
    }

Ali

Reply via email to