diff -r -c original_src\phobos\std\container.d src\phobos\std\container.d *** original_src\phobos\std\container.d Thu Apr 12 16:11:08 2012 --- src\phobos\std\container.d Sat Apr 21 19:47:10 2012 *************** *** 1762,1767 **** --- 1762,1770 ---- @property size_t length() const { return _b - _a; } + + // Array.replace から参照されてるので追加しました。 + @property T* ptr() { return &_outer._data._payload[_a]; } } /** *************** *** 2161,2167 **** size_t insertAfter(Stuff)(Range r, Stuff stuff) { // TODO: optimize ! enforce(_data); immutable offset = r.ptr + r.length - _data._payload.ptr; enforce(offset <= length); auto result = insertBack(stuff); --- 2164,2170 ---- size_t insertAfter(Stuff)(Range r, Stuff stuff) { // TODO: optimize ! enforce(_data._payload); //< enforce(_data)だと意味不明なエラーがたくさんでましたのでかえました。 immutable offset = r.ptr + r.length - _data._payload.ptr; enforce(offset <= length); auto result = insertBack(stuff); *************** *** 2174,2180 **** size_t replace(Stuff)(Range r, Stuff stuff) if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T)) { ! enforce(_data); immutable offset = r.ptr - _data._payload.ptr; enforce(offset <= length); size_t result; --- 2177,2183 ---- size_t replace(Stuff)(Range r, Stuff stuff) if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T)) { ! enforce(_data._payload); immutable offset = r.ptr - _data._payload.ptr; enforce(offset <= length); size_t result; *************** *** 2183,2196 **** if (r.empty) { // append the rest ! return result + insertBack(stuff); } r.front = stuff.front; r.popFront(); ++result; } // Remove remaining stuff in r ! remove(r); return result; } --- 2186,2200 ---- if (r.empty) { // append the rest ! return result + insertBefore( r, stuff); //< こっちの方がイイと思うの } r.front = stuff.front; r.popFront(); ++result; } // Remove remaining stuff in r ! // remove(r) だと、std.algorithm.remove が先にヒットしてしまう。 ! linearRemove(r); return result; } *************** *** 2206,2212 **** { r.front = stuff; r.popFront(); ! remove(r); } return 1; } --- 2210,2216 ---- { r.front = stuff; r.popFront(); ! linearRemove(r); } return 1; }