[Issue 2871] New: Take assumes that R.opIndex(uint) returns an lvalue.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Apr 21 13:28:48 PDT 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2871
Summary: Take assumes that R.opIndex(uint) returns an lvalue.
Product: D
Version: 2.029
Platform: PC
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: Phobos
AssignedTo: bugzilla at digitalmars.com
ReportedBy: dsimcha at yahoo.com
import std.range, std.algorithm;
void main() {
auto r = iota(0, 10, 1);
assert(equal(r, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9][]));
r = iota(0, 11, 3);
assert(equal(r, [0, 3, 6, 9][]));
assert(r[2] == 6);
}
C:\dmd\windows\bin\..\..\src\phobos\std\range.d(1184): Error:
this._input.opIndex(index) is not an lvalue
C:\dmd\windows\bin\..\..\src\phobos\std\range.d(4): Error: template instance
std.range.iota!(int,int,int) error instantiating
This is caused by
static if (isRandomAccessRange!(R))
ref ElementType!(R) opIndex(uint index)
{
enforce(_maxAvailable > index);
return _input[index];
}
in std.range. What is needed is some compile time reflection to determine
whether a function returns by reference or value.
--
More information about the Digitalmars-d-bugs
mailing list