Bug 2730 – Restriction on op= can be lifted

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dlang.org
Product
D
Version
D2
Platform
x86
OS
Linux
Creation time
2009-03-12T00:09:00Z
Last change time
2015-06-09T01:21:08Z
Assigned to
bugzilla
Creator
jlquinn

Comments

Comment #0 by jlquinn — 2009-03-12T00:09:54Z
The section on opIndex and opIndexAssign states that op=, ++, and -- operators can't be supported. However, if we have: struct S { ref <type> opIndex(size_t idx) {...} } then, the following code will do what we expect S s; s[i] += 4; as the += ends up calling opIndex. At least, this is what dmd 2.026 appears to do. If the docs are adjusted accordingly, then that wart is removed. As a side note, opIndexAssign doesn't appear necessary at all if we do things this way. As long as opIndex is declared with ref, it can be used as lvalue and rvalue.
Comment #1 by smjg — 2009-03-20T20:10:32Z
opIndexAssign will always be needed for something. Library implementations of AAs and bit arrays are an example. There should be probably be a choice of defining opIndexAssign or defining opIndex with a ref return. opIndexAssign could even work for the example code, if s[i] += 4 were rewritten as s[i] = s[i] + 4 (with i being evaluated only once) and then expanded into op functions. The tricky bit is deciding on the logic to use if both are defined....
Comment #2 by bugzilla — 2009-04-01T13:56:03Z
Fixed DMD 2.027