Bug 8064 – return reference semantics not obeyed on delegates?

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-05-08T03:12:00Z
Last change time
2012-05-10T22:39:45Z
Keywords
pull, rejects-valid
Assigned to
nobody
Creator
gasper.azman
Blocks
8065

Comments

Comment #0 by gasper.azman — 2012-05-08T03:12:02Z
I feel this is best explained with a testcase: This is the error DMD gives: test.d(21): Error: arryacc(3LU) is not an lvalue code: ##### class A { private size_t size = 5; auto newArrayAccessor(T)() { T[] a = new T[size]; ref T accessor(size_t i) { return a[i]; } return &accessor; } } void main() { uint[5] arry; ref uint acc(size_t i) { return arry[i]; } acc(3) = 5; // works auto a = new A; auto arryacc = a.newArrayAccessor!(uint)(); arryacc(3) = 5; // doesn't work. What gives? }
Comment #1 by gasper.azman — 2012-05-08T03:27:13Z
Simplified testcase (by q66): void main() { uint[5] arry; ref uint acc(size_t i) { return arry[i]; } auto arryacc = &acc; arryacc(3) = 5; // same error }
Comment #2 by k.hara.pg — 2012-05-08T04:57:01Z
Comment #3 by github-bugzilla — 2012-05-10T20:00:23Z
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/5a9b927ae2501aac795c03d1cd6be79188e1e197 fix Issue 8064 - return reference semantics not obeyed on delegates? https://github.com/D-Programming-Language/dmd/commit/813a0216b2a205fb06bd8d02d7c667317c7b5ce4 Merge pull request #933 from 9rnsr/fix8064 Issue 8064 - return reference semantics not obeyed on delegates?