Bug 3311 – std.range.chain shouldn't have opIndexAssign if arguments aren't mutable.

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
Other
OS
Windows
Creation time
2009-09-11T07:50:00Z
Last change time
2015-06-09T01:26:49Z
Keywords
patch
Assigned to
andrei
Creator
dsimcha

Comments

Comment #0 by dsimcha — 2009-09-11T07:50:39Z
import std.range; void main() { immutable(uint)[] foo = [1,2,3,4,5]; immutable(uint)[] bar = [6,7,8,9,10]; auto baz = chain(foo, bar); } C:\dmd2\windows\bin\..\..\src\phobos\std\range.d(930): Error: this._input._field_field_0[index] isn't mutable C:\dmd2\windows\bin\..\..\src\phobos\std\range.d(930): Error: this._input._field_field_1[index] isn't mutable This is too simple to fix to do a formal patch, but here's an "inline patch": /**Tests whether a type is mutable, i.e. not const or immutable. This is only * tested at the shallowest level, not transitively. For example, an * immutable(uint)[] would be considered mutable.*/ template isMutable(T) { enum isMutable = !is(T == const(T)); } unittest { static assert(isMutable!(ElementType!(uint[]))); static assert(isMutable!(ElementType!(float[]))); static assert(!isMutable!(ElementType!(string))); static assert(isMutable!(ElementType!(string[]))); static assert(!isMutable!(ElementType!(const(char)[]))); static assert(isMutable!string); } And in std.range.chainImpl: static if (allSameType) void opIndexAssign(ElementType v, uint index) should be changed to static if (allSameType && isMutable!(ElementType)) void opIndexAssign(ElementType v, uint index)
Comment #1 by dsimcha — 2009-12-01T06:21:48Z
Fixed SVN.
Comment #2 by bugzilla — 2009-12-06T00:50:58Z
Fixed dmd 2.037