[Issue 3311] New: std.range.chain shouldn't have opIndexAssign if arguments aren't mutable.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Sep 11 07:50:40 PDT 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3311
Summary: std.range.chain shouldn't have opIndexAssign if
arguments aren't mutable.
Product: D
Version: 2.032
Platform: Other
OS/Version: Windows
Status: NEW
Keywords: patch
Severity: normal
Priority: P2
Component: Phobos
AssignedTo: nobody at puremagic.com
ReportedBy: dsimcha at yahoo.com
--- Comment #0 from David Simcha <dsimcha at yahoo.com> 2009-09-11 07:50:39 PDT ---
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)
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list